[JSP/JSTL] C:If string test wil string converteren naar long

Pagina: 1
Acties:

  • SchizoDuckie
  • Registratie: April 2001
  • Laatst online: 18-02-2025
Sinds een aantal weken ben ik naast de standaard Struts libs ook bezig met JSTL, maar ik kom toch een paar mindboggling dingen tegen:

Ik probeer uit een bean een string waarde te plukken, en te testen of de waarde hiervan W of Z (weekdag of zondag is)

Dit doe ik d.m.v. de volgende code:

Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c"%>
<%@ page isELIgnored="true" %>

// snip

<c:forEach var="currentEtmaalPatroon" items="${requestScope.contract.biedingsetmaalpatronen.biedingsetmaalpatroon}" >  
// snip
 <c:if test="${lastStartDate == null || (lastStartDate != null && lastStartDate != currentEtmaalPatroon.begindatum)}">
      <td> <c:out value="${currentEtmaalPatroon.begindatum}" /></td>
      <td> <c:out value="${currentEtmaalPatroon.einddatum}"/></td>
  </c:if>
// tot hier gaat het goed
// snip
  
 <c:if test="${currentEtmaalPatroon.werkZonfeest == 'W'}" >
           <c:set var="werkzon" value="Werkdag"/>
 </c:if>
 <c:if test="${currentEtmaalPatroon.werkZonfeest == 'Z'}">
       <c:set var="werkzon" value="Zondag"/>
 </c:if>   
 <c:out value="${werkzon}"/>


bij het aanroepen van deze code kom ik op de volgende foutmelding:
[ServletException in:/WEB-INF/jsp/content_biedperiodes_piekdal.jsp] javax.servlet.jsp.JspException: An error occurred while evaluating custom action attribute "test" with value "${currentEtmaalPatroon.werkZonfeest == 'W'}": An exception occured trying to convert String "W" to type "java.lang.Long" (null)'
Als ik deze parameter op het scherm probeer te zetten d.m.v een simpele
Java:
1
 <c:out value="${currentEtmaalPatroon.werkZonfeest}" />

dan krijg ik netjes een W of een Z in beeld.

Ik heb al overlegd met m'n collegae of zij iets kunnen ontdekken wat ik fout zou kunnen doen, maar op andere pagina's werkt soortgelijke code wel, in de bean is werkZonfeest gevuld en zeker weten string, er zit geen whitespace omheen en ga zo maar door.


Heeft iemand een idee waarom hij deze string om probeert te zetten naar een Long?

[update]Platform is Jdeveloper 10.1.3[/update]

[ Voor 8% gewijzigd door SchizoDuckie op 14-09-2006 13:45 ]

Stop uploading passwords to Github!


  • momania
  • Registratie: Mei 2000
  • Laatst online: 17:37

momania

iPhone 30! Bam!

Volgens mij had ik dit in het verleden ook een keer.. Kwam dacht ik door het gebruiken van verkeerde taglib. Probeer deze eens:
Java:
1
<%@ taglib uri="http://java.sun.com/jstl/core_rt" prefix="c" %>

:)

[edit]
En anders de quotes andersom proberen (enkele om de expressie en dubbele om de W):
Java:
1
2
3
<c:if test='${currentEtmaalPatroon.werkZonfeest == "W"}' >
           <c:set var="werkzon" value="Werkdag"/>
 </c:if> 

[ Voor 37% gewijzigd door momania op 14-09-2006 14:19 ]

Neem je whisky mee, is het te weinig... *zucht*


  • SchizoDuckie
  • Registratie: April 2001
  • Laatst online: 18-02-2025
momania schreef op donderdag 14 september 2006 @ 14:16:
Volgens mij had ik dit in het verleden ook een keer.. Kwam dacht ik door het gebruiken van verkeerde taglib. Probeer deze eens:
Java:
1
<%@ taglib uri="http://java.sun.com/jstl/core_rt" prefix="c" %>

:)

[edit]
En anders de quotes andersom proberen (enkele om de expressie en dubbele om de W):
Java:
1
2
3
<c:if test='${currentEtmaalPatroon.werkZonfeest == "W"}' >
           <c:set var="werkzon" value="Werkdag"/>
 </c:if> 
De taglib core_rt doet helaas niets (ik zie gewoon m'n {} codes op het scherm) en het omkeren van de quotes helpt helaas ook niet ;( (exact dezelfde foutmelding, maar dan met dubbele quotes in de te parsen string ipv enkele

[ Voor 6% gewijzigd door SchizoDuckie op 14-09-2006 14:36 ]

Stop uploading passwords to Github!


Verwijderd

Je kan ook gewoon equals gebruiken in plaats van de ==;

<c:if test="${currentEtmaalPatroon.werkZonfeest equals W}" >
<c:set var="werkzon" value="Werkdag"/>
</c:if>

Verwijderd

Welke servlet container gebruik je eigenlijk? Met isELIgnored op true laat je je tags zelf de EL evalueren in plaats van de container. Dit zou je voor de standaard tags (JSTL dus) niet uit maken als je de goede zet gebruikt tenminste, maar andere taglibs verwachten dit waarschijnlijk niet. (het is een heel erg oud iets wat nog uit de J2EE 1.2/1.3 tijd stamt).

Overigens een algemene tip; het lijkt erop als jij erg excessief gebruik maakt van JSTL. De bedoeling van JSTL is eigenlijk om je backing bean al het werk te laten doen, en alleen kleine rendering beslissingen m.b.v. JSTL en EL te doen.

Voor zover ik het nu zie in je fragment heb jij gewoon je scriptlets direct vervangen door JSTL. Dat is dus logica die niet in de view hoort. Je hebt de bedoeling van JSTL IMHO dus (nog) niet helemaal begrepen.

Bijvoorbeeld, die beslissing voor wat werkzon moet worden kun je gewoon in je bean doen. Op je pagina zet je dan ALLEEN <c:out value="${mybean.werkzon}" /> neer.

Zelfde met de test:

code:
1
lastStartDate == null || (lastStartDate != null && lastStartDate != currentEtmaalPatroon.begindatum)}


Dit is business logica en hoort NIET in de view thuis. Veel beter zorg je dat je bean dit evalueerd (of nog beter, dat je backing bean het aan een business class vraagt, maar laten we het niet te dol maken ;) ) en dat je dan in je pagina ALLEEN maar <c:if test="${mybean.renderDate}" > neerzet (waarbij de renderDate dus een method isRenderDate in je bean classe is)