2009-12-28 48 views
27

我必须访问迭代器内部计算的JSTL变量。
摘录的代码:如何在scriptlet中使用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> 

我想跳过第3行,我在pageContext中设置变量。没有设置它可以达到相同的结果吗?还是有其他方式我可以使用?

回答

18

你可以尝试以下方法:

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

顺便说一句 - 你可以添加另一种方法resultBean - getMaskedCardNum(),然后只是把网页${resultBean.maskedCardNum}这是更具可读性。

+0

他想摆脱小脚本,这是一件好事。 – BalusC 2009-12-28 14:08:03

+0

accepted:'你可以添加另一个方法resultBean - getMaskedCardNum()' – 2009-12-28 14:09:00

+0

@BalusC - 我同意,这就是为什么我已经把第二个解决方案。 – 2009-12-28 14:26:51

7

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

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

像你将有一些:

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