关于struts2的一个小问题
一个小问题 ,高手们请看下面代码问题出在哪里
public class PersonAction extends ActionSupport{
private StaticThing staticThing;
private Person person;
public PersonAction() {
super();
this.staticThing = new StaticThing();
}
public void setStaticThing(StaticThing staticThing) {
this.staticThing = staticThing;
}
public StaticThing getStaticThing() {
return staticThing;
}
public void setPerson(Person person){this.person = person;}
public Person getPerson(){return this.person;}
}
public class StaticThing {
private Nation nation;
public Nation getNation() {
return nation;
}
public void setNation(Nation nation) {
this.nation = nation;
}
}
public class Nation {
private Collection<String> list = new ArrayList<String>();
public Nation(){
list.add("汉族");
list.add("回族");
list.add("满族");
list.add("苗族");
}
public Collection<String> getList() {
return list;
}
public void setList(Collection<String> list) {
this.list = list;
}
}
jsp代码:
民族s:select name="person.nation" list="staticThing.nation.list"/>
===============分割线==========================================
提示说:org.apache.jasper.JasperException: tag 'select', field 'list', name 'person.nation': The requested list key 'staticThing.nation.list' could not be resolved as a collection/array/map/enumeration/iterator type. Example: people or people.{name} - [unknown location]
-------------------------------------------------
请问哪里错了, staticThing.nation.list这种连着用好几个"."的写法可以吗?应该怎么写
[解决办法]
我不是说了吗select标签的list通常是map的他的listKey会默认取map的key而楼主这个是list集合哪里来的key当然会报这个类型不对应的错误了。楼主你这里不是map就不要用s:select标签你可以换成
<!--使用select元素利用s:iterator进行迭代-->
<select>
<s:iterator value="staticThing.nation.list">
<!--这里<s:property />之所以不写value因为iterator每次迭代的时候就会值压入值栈的栈顶,value不写默认就是取栈顶的值 -->
<option value="<s:property />"><s:property /></option>
</s:iterator>
<select>
[解决办法]
怎么发现你的jsp里没有迭代?
jsp代码:
<!--使用select元素利用s:iterator进行迭代-->
<select>
<s:iterator value="staticThing.nation.list" id="ll">
<option value="${ll}">${ll}
</option>
</s:iterator>
<select>