我有下面的下拉列表,正确地显示了选项,但是当我选择一个项并提交表单时,它会遇到以下错误:
'select', field 'list', name 'name': The requested list key 'listnames' could not be
resolved as a collection/array/map/enumeration/iterator type. Example: people or
people.{name} - [unknown location]我的JSP表单
<s:form method="POST" action="addNames">
<s:select name="name"
label="Names"
list="listnames"
/>
</s:form>我的行动
@Action
public class Myaction implements ModelDriven{
private MyClass myclass = new MyClass();
private List listnames = new ArrayList();
@Override
public MyClass getModel() {
return this.myclass;
}
public List getListnames() {
return listnames;
}
public void setListnames(List listnames) {
this.listnames = listnames;
}
public MyClass getMyClass() {
return myclass;
}
public void setMyClass(MyClass myclass) {
this.myClass = myclass;
}
}我的班
public class MyClass {
private String name;
..... getter and setters go here ....
}撑杆
<package name="MyUsers" extends="default" namespace="/MyUsers">
<action name="*" method="{1}" class="com.myproject.controller.Myaction">
<result name="uAdd" type="tiles" >uAdd</result>
<result name="uView" type="tiles" >uView</result>
</action>
</package>发布于 2013-03-01 04:57:39
将选择标记更改如下
<s:form method="POST" action="addNames">
<s:select name="myclass.name"
label="Names"
list="listnames"
/>
</s:form>编辑:
问题:,我猜您是直接命中jsp,因此没有任何动作执行。如果没有任何操作执行,那么请求中就没有任何列表。
解决方案。在呈现jsp或视图之前,按下执行动作类的方式,并且列表应该初始化或填充。
在操作类中创建一个类似于populateView的方法,并执行此方法,而不是直接执行JSP。
希望你能理解我想说的话。
发布于 2013-03-01 04:55:29
步骤1:确保正确完成listnames的getter和setter
步骤2:确保正确地完成了listnames列表的声明和初始化
更新2示例示例
struts.xml
<action name="getText" class="commonpackage.ReportsCommonClass" method="getText">
<result name="success">index.jsp</result>
</action>
<action name="myaction" class="commonpackage.ReportsCommonClass" method="myaction">
<result name="success">index2.jsp</result>
</action>index.jsp
<s:form id="conform" action="myaction" method="post">
<label>NAME</label>
<s:select id="name1" name="name1" list="mylist" headerKey="0" headerValue="--SELECT--"/>
<s:submit value="Click" />
</s:form>In commonpackage.ReportsCommonClass class
ArrayList mylist=new ArrayList();
public ArrayList getMylist() {
return mylist;
}
public void setMylist(ArrayList mylist) {
this.mylist = mylist;
}
public String getText()
{
mylist.add("NAME 1");
mylist.add("NAME 2");
mylist.add("NAME 3");
mylist.add("NAME 4");
mylist.add("NAME 5");
return SUCCESS;
}
String name1;
public String getName1() {
return name1;
}
public void setName1(String name1) {
this.name1 = name1;
}
public String myaction()
{
System.out.println("NAMEEEEEEEEEEEEEEEEEEEEE:"+name1);
return SUCCESS;
}发布于 2013-03-01 04:55:29
在操作类中为名称提供getter setter。由于选择标记名为<s:select name="name">,所以当您提交表单时,它将在操作类中搜索属性名称。这可能是你的问题所在。
https://stackoverflow.com/questions/15150706
复制相似问题