2009-12-28 58 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)}" /> 
相關問題