2013-03-27 96 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服务器端