2010-12-09 39 views
1

je veux changer tous scriptlets dans mes pages jsp à jstl, comment puis-je changer ce code pour jstlcomment puis-je changer le scriptlet jsp spécial en jstl?

<%  Map validationResults = (HashMap) request.getAttribute("validationResults");%> 
    <% if (validationResults != null) { 
      if (validationResults.containsKey("userName")) { //how can i chage this line to jstl ? 
    %> 
    <%=((ValidationResult) (validationResults.get("userName"))).getDetails()%> //how can i chage this line to jstl too ? 
    <%}%> 
<%}%> 

MON JSTL

<c:set var="validationResults" value="validationResults" scope="request"></c:set> 
    <c:if test="validationResults != null"> 
    //how can i change the code of map here? 
    </c:if> 

et un autre problème avec ArrayList qui contient liste d'objet Groupe, dans la boucle je veux obtenir chaque objet Groupe et vérifier une méthode spécifique à l'intérieur de l'objet Groupe, comment puis-je accéder à ces méthodes via jstl ??

Je souhaite modifier ce code

<%List<Group> allGroupList = new ArrayList<Group>(); 
     allGroupList = (ArrayList) request.getAttribute("groups");%> 

     <% for (int index = 0; index < allGroupList.size(); index++) {%> 
     <%Group aGroup = (Group) allGroupList.get(index);%> 
     <label ><%=aGroup.getGroupEName()%></label> 
     <%if (aGroup.isIsUserGroup()) {%> 
     <input type="checkbox" name="group" value="<%=aGroup.getGroupNo()%>" CHECKED /> 
     <%} else {%> 
     <input type="checkbox" name="group" value="<%=aGroup.getGroupNo()%>" /> 
     <%}%> 
    <%}%> 

voici mon code a changé:

<jsp:useBean id="GroupBean" class="ps.iugaza.onlineinfosys.entities.Group" type="ps.iugaza.onlineinfosys.entities.Group" scope="reqeust"> 
<c:set var="allGroupList" value="groups" scope="request"></c:set> 
<c:forEach var="grp" items="${allGroupList}" varStatus="status"> 
     //?????? what should i do ? 
</c:forEach> 

Répondre

2

Pour la première partie

JSTL et EL ne fonctionne avec la méthode qui suit Java Bean convention. Si vous voulez vraiment suivre cette route, vous pouvez boucler votre map.

<c:forEach items="${requestScope.validationResults}" var="mapEntry" varStatus="index"> 
    <c:if test="${mapEntry.key == 'userName'}"> 
     <tr> 
      <td>${mapEntry.value.details}</td> 
     </tr> 
    </c:if> 
</c:forEach> 

L'autre façon peut être juste obtenir userName de la carte, et vérifiez si son null ou non, et faire tout ce que vous aimez. C'est en effet une meilleure idée.

<c:if test="${requestScope.validationResults['userName'] != null}"> 
    <tr> 
     <td>${requestScope.validationResults['userName'].details}</td> 
    </tr> 
</c:if> 

Pour la deuxième

<c:forEach var="grp" items="${requestScope.groups}" varStatus="status"> 
    <label>${grp.groupEName}</label> 
    <input type="checkbox" name="group" value="${grp.groupNo}" ${grp.isUserGroup ? 'checked' : ''} /> 
</c:forEach> 
+0

Le code n'a aucune magie de non-rendu, donc c'est tout à fait correct de le faire dans jstl, imho. – heikkim

+0

@heikkim: Mis à jour. N'a pas été dans le flux logique avant. ;). Merci de m'avoir signalé quand même. –

+0

@Adeel Ansari - Une exception se produit dans le deuxième exemple: lorsque je veux accéder aux attributs de l'objet Groupe dans $ {grp.groupEName} et $ {grp.groupNo}, une exception exception que la propriété n'est pas définie, et que est sensible, je pense que nous devrions faire de casting pour l'objet dans la liste de groupe? Comment faire cela? – palAlaa

1

Quant au n ° 1), vous devrez remplir votre request par une action/contrôleur et un script JSTL qui parcourt votre carte comme suit :

Attention:Untested

<c:if test="${requestScope.validationResults != null}"> 
    <c:forEach var="entry" items="${requestScope.validationResults}"> 
     <c:if test="${entry.key == 'userName'}"> 
      Result: ${entry.value.details}; 
     </c:if> 
    </c:forEach> 
</c:if> 

Adeel Ansari a répondu le numéro 2 pour vous.

+0

@The Elite: Moi aussi, j'ai travaillé sur la façon de boucler, après ma première tentative. Mais alors cela semblait être une idée pas si bonne. –

+0

@Adeel Ansari, Cela fait longtemps que je n'ai pas fait de JSTL, et vous avez raison ... le mien est plus "bouclé". –

+0

Je préfère utiliser des scriptlets traditionnels avec de hautes performances plutôt que de parcourir toutes les cartes pour avoir mes besoins. – palAlaa