读书人

关于struts2的一个小疑点

发布时间: 2013-09-11 16:26:28 作者: rapoo

关于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这种连着用好几个"."的写法可以吗?应该怎么写


[解决办法]

引用:
能举个例子说明该怎么用吗
最好能拿我上面的代码举例,怎么改...

jsp代码:
民族s:select name="person.nation" list="staticThing.nation.list" listKey="staticThing.nation.list" listValue="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>

[解决办法]
引用:
Quote: 引用:

ognl表达式,只要里面有get方法,那样写应该就是可以的吧
public Collection<String> getList() {
return list;
}这个get方法我没这样写过,返回值是List或者Map比较好吧,愿意嘛我不知道,可能跟楼上说的吧



我试了下把Collection换成list,错误提示一样啊,
btw,最初就是List,是因为跑不起来才后来换成collection的..

怎么发现你的jsp里没有迭代?
jsp代码:
<!--使用select元素利用s:iterator进行迭代-->
<select>
<s:iterator value="staticThing.nation.list" id="ll">
<option value="${ll}">${ll}
</option>
</s:iterator>
<select>

读书人网 >Java Web开发

热点推荐