2009-12-28 15 views
27

Tengo que acceder a la variable JSTL que se calcula dentro del iterador.
Fragmento de código:¿Cómo puedo usar la variable JSTL en scriptlet?

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

me gustaría acceder ${resultBean.cardNum} en el código scriptlet. lo que estoy haciendo ahora mismo es:

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

Quiero omitir la tercera línea donde estoy configurando la variable en pageContext. ¿Es posible lograr el mismo resultado sin configurarlo? ¿O hay otro camino que puedo usar?

Respuesta

18

Usted puede intentar lo siguiente:

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

BTW - usted puede añadir otro método para resultBean - getMaskedCardNum(), y luego sólo hay que poner en la página de ${resultBean.maskedCardNum} que es más fácil de leer.

+0

Él quiere deshacerse de scriptles, que es una buena cosa. – BalusC

+0

aceptado: 'puede agregar otro método a resultBean - getMaskedCardNum()' –

+0

@BalusC - Estoy de acuerdo, es por eso que he puesto la segunda solución. –

7

Aconsejo crear una función JSTL personalizada (marque this por ejemplo), para que pueda omitir el scriptlet. Así que en lugar de lo feo

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

va a tener algo como:

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