我有以下代码似乎不起作用。我不明白为什么这不起作用。
<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>
任何人都可以提供一些见解吗?
答案 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()