Как я могу использовать переменную JSTL в скриптлете?

Мне нужно получить доступ к переменной JSTL, которая вычисляется внутри итератора.
Фрагмент кода:

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

я хотел бы получить доступ к ${resultBean.cardNum} в коде скриптлета. что я делаю прямо сейчас:

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

Я хочу пропустить третью строку, где я устанавливаю переменную в pageContext. Можно ли добиться того же результата, не устанавливая его? Или есть другой способ, который я могу использовать?


person Rakesh Juyal    schedule 28.12.2009    source источник


Ответы (2)


Вы можете попробовать следующее:

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

Кстати, вы можете добавить еще один метод в resultBean - getMaskedCardNum(), а затем просто добавить страницу ${resultBean.maskedCardNum}, которая будет более читабельной.

person David Rabinowitz    schedule 28.12.2009
comment
Он хочет избавиться от скриптлетов, и это хорошо. - person BalusC; 28.12.2009
comment
принято: you can add another method to resultBean - getMaskedCardNum() - person Rakesh Juyal; 28.12.2009
comment
@BalusC - согласен, поэтому я поставил второе решение. - person David Rabinowitz; 28.12.2009

Я бы посоветовал создать пользовательскую функцию JSTL (проверьте эту например), чтобы можно было опустить скриптлет. Так что вместо уродливого

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

у вас будет что-то вроде:

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