包含在struts2迭代器标记中

时间:2009-08-06 02:06:36

标签: struts2

我有以下代码似乎不起作用。我不明白为什么这不起作用。

<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的Exam类的对象。我也有不正确的Qs列表,其中包含字符串。我正在检查不正确的Qs是否包含questionId。如果是的话我想打印一些文字。尽管如此,上面的代码不起作用,下面的代码随机工作正常。有时它有效,有时它不...... :(

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

任何人都可以提供一些见解吗?

2 个答案:

答案 0 :(得分:0)

我不确定你的Action课程是什么样的,但你可以尝试这样的事情。当您在s:iterator标记内时,我认为每个%{foo}表达式都会尝试访问您正在迭代的特定实例(问题,而不是问题列表)。

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

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);
        }
}

然后在你的JSP中:

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

答案 1 :(得分:0)

#question.questionId.toString()