81,092
社区成员
发帖
与我相关
我的任务
分享
<s:iterator value="themeList" id="thisTheme" var="theme">
<s:property value="theme"/>
<s:iterator value="listOfFlower" var="thisFlower">
<s:if test="theme == fName ">
<h1>true</h1>
</s:if>
</s:iterator>
</s:iterator>
<s:if test="theme =='rose' ">
<h1>true</h1>
</s:if>
<s:if test="fName='rose'">
<h1>true</h1>
</s:if>
<s:iterator value="themeList" var="theme">
<s:iterator value="listOfFlower" var="thisFlower">
<s:if test="%{#theme == #thisFlower.fName}">
<h1>true</h1>
</s:if>
</s:iterator>
</s:iterator>
这样是可以的。
iterator内用var和id有什么区别,我还没有发现。 var theme , var thisFlower
theme 针对外层,而对于内层的fName,因为fName所属thisFlower,是一个对象的属性之一。
所以比较的话
%{#theme == #thisFlower.fName}
关于%,书上解释说:用于表示某字符串为一个OGNL表达式,并被执行。
关于#,能够访问OGNL上下文与ActionContext资源。我不是很懂
而对于简单的property的显示,就没那么多繁琐的符号。
我想,可能是因为对于test这样比较特殊的语句,需要注意。
最后,复杂的逻辑操作,还是应该放在Action中。
<s:if test="theme =='rose' ">
<h1>true</h1>
</s:if>
是没有输出true,但是如果把theme换成fName,就输出true了,说明fName是可以识别的。
但是在第二个iterator里 <s:property value="theme"/>可以直接得到theme的值为 'rose'。
不知道为什么啊
public static void main(String[] args) {
List<String> a = new ArrayList<String>();
List<String> b = new ArrayList<String>();
a.add("111");
a.add("22");
a.add("33");
a.add("44");
b.add("aaa");
b.add("bbb");
b.add("ccc");
for(int i=0;i<a.size();i++){
for(int j=0;j<b.size();j++){
if(a.get(i).equals(b.get(j))){
System.out.println("值相等");
}
}
}
}
没怎么用过s:iterator就不说他了,不过一眼就看到你<s:if test="theme == fName ">这段代码有问题、最起码你得指定theme是哪个list里的fName是哪个list里的啊