Как я могу использовать переменную 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>
Я хочу пропустить 3-ей строку, где я устанавливаю переменную в pageContext. Можно ли добиться такого же результата без его установки? Или есть другой способ, который я могу использовать?
Ответы
Ответ 1
Вы можете попробовать следующее:
<%
ResultBean resultBean = (ResultBean) pageContext.getAttribute("resultBean");
out.write( StringUtils.mask( resultBean.getCardNum() ) );
%>
BTW - вы можете добавить другой метод resultBean - getMaskedCardNum()
, а затем просто поместить на страницу ${resultBean.maskedCardNum}
, которая более читаема.
Ответ 2
Я бы посоветовал создать пользовательскую функцию JSTL (например, this), чтобы вы могли опустить скриптлет.
Поэтому вместо уродливого
<%out.write( StringUtils.mask( (String)pageContext.getAttribute("currentCardNum") ) );%>
у вас будет что-то вроде:
<c:out value="${fnPrefix:maskString(currentCardNum)}" />