Struts2如果标签没有评估

时间:2013-03-27 08:33:29

标签: jsp if-statement struts2 iterator ognl

我有这个代码遍历某个对象集合,我想对每个元素执行类型检查(或instanceof)运算符。但是在<s:if>上,它似乎没有评估。我错过了什么?

<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>

1 个答案:

答案 0 :(得分:0)

实现if循环功能的更好方法是在Action层上编写一个返回字符串值(类名称)的公共函数,并将Question类型作为参数。一些相关的例子可能是这样的

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服务器端覆盖所需的编码