2013-03-27 55 views
-1

我有這個代碼迭代通過一定的對象集合,我想對每個元素執行類型檢查(或instanceof)運算符。然而在我的<s:if>,它似乎沒有評估。我錯過了什麼?Struts2如果標籤沒有評估

<s:iterator value = "myQuestions" var = "q" status="key"> 

     <s:checkbox name="myQuestions[%{#key.index}].chosen" /> 
     <s:property value = "%{myQuestions[#key.index].question}"/> 

    <s:if test ="%{myQuestions[#key.index].getClass().simpleName} == 'Question'" > 
      THIS IS A QUESTION. 
    </s:if> 


</s:iterator> 
+0

您應用程序服務器上運行的是哪個Java版本?根據API,'getSimpleName'需要Java 1.5或更高版本 – orique 2013-03-27 08:38:17

+0

我強烈建議不要將類類型用作視圖層功能開關。當然,你可以用更簡單,更脆弱的方式做到這一點。 – 2013-03-27 13:16:41

+0

@DaveNewton你有什麼想法? – user962206 2013-03-28 00:30:57

回答

0

一個更好的方式來實現的,如果環是寫一個返回(的類名)的字符串值,並採取問題類型作爲參數的操作層上的一個公共職能的功能。一些相關的例子是這樣的

public String getClassName(Ouestion question){ 
    if(question instanceof SomeDerivedQuestion){ 
    return "someDerivedQuestion"; 
    } 
    //other code comes below 
} 

現在在JSP中,你可以做這樣的事情

<s:if test="%{getClassName(myQuestions[#key.index]).equals('someDerivedQuestion')}> 
    THIS IS A DERIVED QUESTION. 
</s:if> 

JSP最好留給處理應用程序的演示文稿部分並覆蓋上所需的編碼Java服務器端