如何在scriptlet中使用JSTL变量?

Rak*_*yal 27 java jsp jstl scriptlet

我必须访问在迭代器中计算的JSTL变量.
代码摘录:

<c:forEach var="resultBean" items="${resultList}" varStatus="status">
   card: ${resultBean.cardNum} 
</c:forEach>
Run Code Online (Sandbox Code Playgroud)

我想访问${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>
Run Code Online (Sandbox Code Playgroud)

我想跳过第3行,我在pageContext中设置变量.没有设置它可以实现相同的结果吗?或者我可以使用其他方式吗?

Dav*_*itz 19

您可以尝试以下方法:

<%
  ResultBean resultBean = (ResultBean) pageContext.getAttribute("resultBean");
  out.write( StringUtils.mask( resultBean.getCardNum() ) );
%>
Run Code Online (Sandbox Code Playgroud)

BTW - 您可以向resultBean添加另一个方法 - getMaskedCardNum()然后只需放入${resultBean.maskedCardNum}更易读的页面.


Boz*_*zho 7

我建议创建一个自定义JSTL函数(例如检查这个),这样就可以省略scriptlet.而不是丑陋

<%out.write( StringUtils.mask( (String)pageContext.getAttribute("currentCardNum") ) );%>
Run Code Online (Sandbox Code Playgroud)

你会有类似的东西:

<c:out value="${fnPrefix:maskString(currentCardNum)}" />
Run Code Online (Sandbox Code Playgroud)