2009-12-28 3 views
27

Je dois accéder à la variable JSTL qui est calculée à l'intérieur de l'itérateur.
Extrait du code:Comment puis-je utiliser une variable JSTL dans un scriptlet?

<c:forEach var="resultBean" items="${resultList}" varStatus="status"> 
    card: ${resultBean.cardNum} 
</c:forEach> 

je voudrais accéder ${resultBean.cardNum} dans le code scriptlet. ce que je fais en ce moment est:

<c:forEach var="resultBean" items="${resultList}" varStatus="status"> 
    card: ${resultBean.cardNum} 
    <c:set var="currentCardNum">${resultBean.cardNum}</c:set> 
    <%out.write(StringUtils.mask((String)pageContext.getAttribute("currentCardNum")));%> 
</c:forEach> 

Je veux sauter la 3ème ligne où je place la variable dans pageContext. Est-il possible d'atteindre le même résultat sans le régler? Ou y a-t-il un autre moyen que je peux utiliser?

Répondre

18

Vous pouvez essayer ce qui suit:

<% 
    ResultBean resultBean = (ResultBean) pageContext.getAttribute("resultBean"); 
    out.write(StringUtils.mask(resultBean.getCardNum())); 
%> 

BTW - vous pouvez ajouter une autre méthode pour resultBean - getMaskedCardNum(), puis il suffit de mettre dans la page ${resultBean.maskedCardNum} qui est plus lisible.

+0

Il veut se débarrasser de scriptlets, ce qui est une bonne chose. – BalusC

+0

accepté: 'vous pouvez ajouter une autre méthode à resultBean - getMaskedCardNum()' –

+0

@BalusC - Je suis d'accord, c'est pourquoi j'ai mis la deuxième solution. –

7

Je vous conseille de créer une fonction JSTL personnalisée (par exemple, this), afin de pouvoir omettre le scriptlet. Ainsi, au lieu de le laid

<%out.write(StringUtils.mask((String)pageContext.getAttribute("currentCardNum")));%> 

vous aurez quelque chose comme:

<c:out value="${fnPrefix:maskString(currentCardNum)}" /> 
Questions connexes