2011-09-07 26 views
3

我正在預處理用戶上載的一些數據,並且我想告訴他們數據的任何行是否無效。我認爲檢查每一行是否有意義,如果有錯誤,將行號添加到錯誤行的哈希集,然後輸出時檢查當前索引是否在哈希集中,並突出顯示該行。使用Struts2突出顯示錶中的行

下面是相關的JSP:

<table> 
     <tr> 
      <s:iterator value="prettyNames"> 
       <th><s:property /></th> 
      </s:iterator> 
     </tr> 
     <s:iterator value="importList" status="stat"> 
      <tr class="class="${lineErrors.contains(%{#stat.index}) ? 'highlight' : ''}""> 
       <s:iterator> 
        <td><s:property /></td> 
       </s:iterator> 
      </tr> 
     </s:iterator> 
    </table> 

在高亮設置背景顏色爲紅色。然而,我在Eclipse中得到一個警告,說「」test「不支持運行時 表達式」並且頁面返回500錯誤,「根據標記文件中的TLD或屬性指令,屬性測試不接受任何表達式」。

突出顯示錶中任意行的正確方法是什麼?

+0

jonathan.cone的答案應該是正確的。但是你需要確保'public Set getLineErrors(){}'存在於action類中。 – lschin

回答

1

您看到此錯誤的原因是因爲您試圖在Struts2標記屬性內評估標準JSP EL表達式,在這種情況下,「test」 。您需要使用OGNL符號與S2標籤,像這樣(假設lineErrors解析對值棧):

<table> 
    <tr> 
     <s:iterator value="prettyNames"> 
      <th><s:property /></th> 
     </s:iterator> 
    </tr> 
    <s:iterator value="importList" status="stat"> 
     <s:if test="%{lineErrors.contains(#stat.index)}"> 
      <tr class="highlight"> 
       <s:iterator> 
        <td><s:property /></td> 
       </s:iterator> 
      </tr> 
     </s:if> 
     <s:else> 
      <tr> 
       <s:iterator> 
        <td><s:property /></td> 
       </s:iterator> 
      </tr>   
     </s:else> 
    </s:iterator> 
</table> 

當然越短的方法是這樣的,在那裏你窩在類中的S2屬性標記屬性,但這是不太可讀:

<table> 
    <tr> 
     <s:iterator value="prettyNames"> 
      <th><s:property /></th> 
     </s:iterator> 
    </tr> 
    <s:iterator value="importList" status="stat"> 
     <tr class="<s:property value='%{lineErrors.contains(#stat.index) ? "highlight" : ""}' />"> 
      <s:iterator> 
       <td><s:property /></td> 
      </s:iterator> 
     </tr>   
    </s:iterator> 
</table> 
+0

這樣做的結果是在服務頁面源代碼中的行>它沒有得到 – dimo414

+0

OGNL表達式不會評估Struts2標籤屬性以外的內容,請更新您的源代碼示例,我將發佈一個更完整的示例。現在,您的示例顯示「

+0

好吧,Java Drinker的回答建議他們可以,我的問題是我正在嘗試使用的JSP – dimo414

0

你擁有它的方式是無效的XHTML。你不能讓<tr>標籤在你喜歡的地方開始。像

<tr class="${lineErrors.contains(%{#stat.index}) ? 'highlight' : ''}"> 
    <!--whatever--> 
</tr> 

這就是我會做類似的Facelets,所以大概在EL工作在支柱相同的方式,我會重新寫的東西。我不確定我是否理解%{#...這種情況的發生

+0

好的,謝謝,不知道你可以在jsp中做一個三元運算符。不過,與我的問題無關,因爲將條件更改爲,例如,「true」工作得很好。我不明白'%{#'瘋狂,我只是學習這個:P – dimo414

+1

前綴#如果它不是來自你的行動的變量。 %{expression}將表達式表示爲一個OGNL表達式,大多數struts2標籤假定這是這種情況,並且不需要將表達式包裝在%{}中。 – Quaternion