在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()