2009-12-28 14 views
27

Devo accedere alla variabile JSTL che è calcolata all'interno dell'iteratore.
Estratto di codice:Come posso usare la variabile JSTL nello scriptlet?

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

mi piacerebbe accedere ${resultBean.cardNum} nel codice scriptlet. quello che sto facendo in questo momento è:

<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> 

voglio saltare terza linea dove sto impostando la variabile in pageContext. È possibile ottenere lo stesso risultato senza impostarlo? O c'è un altro modo che posso usare?

risposta

18

si può provare il seguente:

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

BTW - è possibile aggiungere un altro metodo per resultBean - getMaskedCardNum(), e poi appena messo nella pagina ${resultBean.maskedCardNum} che è più leggibile.

+0

Egli vuole sbarazzarsi di scriptlet, che è una buona cosa. – BalusC

+0

accettato: 'puoi aggiungere un altro metodo a resultBean - getMaskedCardNum()' –

+0

@BalusC - Sono d'accordo, ecco perché ho messo la seconda soluzione. –

7

Suggerirei di creare una funzione JSTL personalizzata (controllare this ad esempio), in modo da poter omettere lo scriptlet. Così, invece del brutto

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

si avrà qualcosa di simile:

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