在struts2迭代器标记中包含

在struts2迭代器标记中包含,struts2,Struts2,我有下面的代码,它似乎不起作用。我不明白这为什么行不通 <s:iterator value=%{questions} id="question"> <s:if test='%{incorrectQs.contains("#question.questionId")}'> Print something here </s:if> </s:iterator> 在这里打印一些东西 在上面的代码中,基本上我在action类中有

我有下面的代码,它似乎不起作用。我不明白这为什么行不通

<s:iterator value=%{questions} id="question">
   <s:if test='%{incorrectQs.contains("#question.questionId")}'>
      Print something here
   </s:if>
</s:iterator>

在这里打印一些东西
在上面的代码中,基本上我在action类中有一个名为getQuestions的方法。此列表包含具有get/set questionId的考试类对象。我还有一个包含字符串的错误列表。我正在检查不正确的Q是否包含问题ID。如果有,我想打印一些文本。尽管上面的代码不起作用,但下面的代码可以随机正常工作。有时有效,有时无效…:(


在这里打印一些东西

有人能对此提供一些见解吗?

我不确定你的
Action
类是什么样子的,但你可以尝试这样做。当你在
s:iterator
标记中时,我想每个
%{foo}
表达式都会尝试访问你正在迭代的特定实例(问题,而不是问题列表)

注意:可能有一种方法可以使用
#
s:iterator
标记中引用父对象。我只是没有这样做,所以不能确定它是否对您有帮助

公共类ActionClass{
私有列表mQuestions;
私人问题;
公共字符串execute(){
//构建/阅读问题,填充不正确的问题等。。。
回归成功;
}
公共列表问题(){
返回mQuestions;
}
//不需要是内部类
公开课问题{
私有int mQuestionId;
public int getQuestionId(){
返回mQuestionId;
}
公共布尔getIsIncorrect(){
返回mIncorrectQuestions.contains(mQuestionId);
}
}
然后在JSP中:

<s:iterator value='%{questions}'>
    <s:if test='%{isIncorrect}'>
        Question <s:property value='${questionId}'/> is Incorrect!
    </s:if>
</s:iterator>

问题不正确!

考试的questionId属性是字符串吗?如果不是,则可能是类型转换问题。如果传入整数(或任何其他非字符串),即使字符串的值等于toString(),string equals方法(将由List contains方法调用)也不会返回true整数的值。是否有方法实际检查类型??您应该能够在getQuestionId()上设置断点方法,然后从那里开始操作。接受答案很有帮助,或者如果你自己回答了,那么为将来的vistorsStruts2语法输入答案会很糟糕!请尝试使用
转换为JSP变量并使用scriptlet。至少你会知道发生了什么。你至少可以将
值=%{questions}括起来
value=“%{questions}”等引号中
public class ActionClass ... {

    private List<Question> mQuestions;
    private Set<Integer> mIncorrectQuestions;

    public String execute() {
        // build/read questions, populate incorrect questions, etc...
        return SUCCESS;
    }

    public List<Question> getQuestions() {
        return mQuestions;
    }

    // does not need to be an inner class
    public class Questions {

        private int mQuestionId;

        public int getQuestionId() {
            return mQuestionId;
        }

        public boolean getIsIncorrect() {
            return mIncorrectQuestions.contains(mQuestionId);
        }
}
<s:iterator value='%{questions}'>
    <s:if test='%{isIncorrect}'>
        Question <s:property value='${questionId}'/> is Incorrect!
    </s:if>
</s:iterator>
#question.questionId.toString()