web-dev-qa-db-ja.com

スクリプトレットで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>

PageContextで変数を設定している3行目をスキップします。設定しなくても同じ結果が得られますか?または、私が使用できる他の方法がありますか?

27
Rakesh Juyal

以下を試すことができます。

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

ところで、resultBeanに別のメソッドを追加することもできます-getMaskedCardNum()、そしてより読みやすい_${resultBean.maskedCardNum}_ページに置くだけです。

19

スクリプトレットを省略できるように、カスタムJSTL関数(たとえば this を確認)を作成することをお勧めします。だから醜いの代わりに

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

あなたは次のようなものになります:

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