2013-03-25 60 views
3

我有一個JSTL循環,我試圖檢查給定的變量是否爲空或不具有動態變量名稱。當我用頁面作用域使用c:set時,變量對if語句不可訪問。但是,當我使用<% pageCotnext.setAttribute(...); %>進行設置時,該變量可用。JSTL c:設置不按預期工作

<% 
pageContext.setAttribute("alphaParA", "test"); 
pageContext.setAttribute("alphaParF", "test"); 
int i = 0; 
%> 
<ul class="alphadex_links"> 
    <c:forEach var="i" begin="0" end="25" step="1" varStatus="status"> 
     <c:set var="currentLetter" scope="page">&#${i+65}</c:set> 
     <c:set var="currentPar" scope="page">alphaPar${currentLetter}</c:set> 
     <% pageContext.setAttribute("currentPar", "alphaPar" + (char)('A' + i++)); %> 
     <li> 
      <c:choose> 
       <c:when test="${not empty pageScope[currentPar]}"> 

的測試總是失敗,當我刪除pageContext.setAttribute塊,但是它成功了A和F,因爲它應該當塊是,我很迷茫,找不到任何地方幫助。

回答

0

它失敗了,因爲HTML在JSTL運行時不運行。您實際上將Java字符串&#65傳遞給它,而不是所需的字符A,在Java/JSP/JSTL完成其作業後,由HTML瀏覽器根據HTML實體&#65;代表HTML瀏覽器對HTML進行檢索和解析。請注意你的HTML實體缺少結束分號,但這不是你具體問題的原因。

至於具體的功能要求,對不起,你對運氣不好。它不支持char。最好的辦法是對付像這樣的字符串:

<c:forEach items="${fn:split('A,B,C,D,E,F,G,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z', ',')}" var="currentLetter"> 
    <c:set var="currentPar" value="alphaPar${currentLetter}" /> 
    ${pageScope[currentPar]} 
</c:forEach> 

如果必要的話,就自動生成的字母在Java中端String[]並將其設置爲應用程序的屬性。

+0

感謝這是我需要知道的。 – projectpatgt 2013-03-25 17:29:48

+0

不客氣。 – BalusC 2013-03-25 17:31:56