<logic:iterate id="test" collection="${list}">//这个collection中把${list}改为list会报错
<bean:write name="test" property="deptname"/>
</logic:iterate>
<html:form action="/employee.do">
<html:select property="deptid">
<html:options collection="list" property="deptid" labelProperty="deptname"/>
//这个collection中把list改为${list}会报错
</html:select>
</html:form>
那位兄弟能说下为什么吗,
[b]问题补充:[/b]
回楼下兄弟,我在action中设置了一个属性,
List list = new ArrayList();
list.add("str1");
list.add("str2");
list.add("str3");
request.setAttribute("list",list);
当我在页面上用来取是没问题的
但我在时就会出现问题,只能改为
才可以,
只想知道这是为什么
谢谢
你用的是collection属性,我一般不用那个属性。我用的是:/logic:iterate,没有用过collection,collection取得就是一个运行时的集合,这个属性具体没有用过!用name就意味着通过name来识别。
想和name应该差不多。不过可以考虑如下的用法:
自定义一个基本类型的数组,让它在页面上循环显示,分别使用name和collection属性来循环,就是做两个。collection会不会只接受List,Map,Set之类的东西??
在做下拉框时,虽然属性名字叫collection,但是他实际上还是按照名字来取对象的。在logic:iterate中name和collection都存在,但是两个不能同时使用,用name时识别的就是对象的名字,而使用collection时就是要使用一个集合,所以得需要一个值对象,而不是一个对象的名字,struts标签就是比较怪而已!不必执着于这点东西。
你那EL标签怎么能这样用呢,struts的标签常常按照beanname(这个说法不太准确)来查找对应的对象,像你那样用EL表达式struts当然不认识了。实在不了解,你就拿JSTL和它做个比较吧,比如:/c:forEach,这个时候需要用El来取得这个表达式,而如果直接写list就会出错!而在struts中这样是行不通的,它不是不认识你的EL,而是不能把你的EL和它的beanname来对应起来。在struts标签内,就不要用EL表达式了。
不过我没试过:request.setAttribute("${list}",list);这样的设置,在struts标签内是否可以取到呢!是不是很有创意!