27

我必须访问在迭代器内部计算的 JSTL 变量。
代码摘录:

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

我想${resultBean.cardNum}在 scriptlet 代码中访问。我现在正在做的是:

<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 中设置变量的第三行。不设置也能达到同样的效果吗?或者我可以使用其他方法吗?

4

2 回答 2

19

您可以尝试以下方法:

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

顺便说一句 - 您可以向 resultBean - 添加另一种方法getMaskedCardNum(),然后放入${resultBean.maskedCardNum}更具可读性的页面。

于 2009-12-28T12:50:14.030 回答
7

我建议创建一个自定义 JSTL 函数(例如检查这个),以便您可以省略 scriptlet。所以,而不是丑陋的

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

你会有类似的东西:

<c:out value="${fnPrefix:maskString(currentCardNum)}" />
于 2009-12-28T13:40:16.880 回答