我在JSP中有这个下拉列表:
<s:select name = "destination"
label = "the destination"
list = "drop"
listValue = "nameDest"
headerKey = "0"
headerValue = "chose a destination" />
并且动作类中有destination
个对象:
private Destination destination;
//getters and setters
但是当我提交时,我收到了这个错误:
没有为行动
定义结果com.iticsys.GBO.actions.UserAction
和结果input
当我删除下拉列表时,一切正常。所以我认为Struts试图将nameDest
中选定值的值(它是一个字符串)放入动作类中的destination
对象中。
那么我怎样才能得到所选对象?
更新:
destination是从Destination类实例化的对象:
@Entity
public class Destination {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int idDest;
private String nameDest;
drop是目的地列表:
private List<Destination> drop;
public List<Destination> getDrop() {
return drop;
}
public void setDrop(List<Destination> drop) {
this.drop = drop;
}
经过一些修改(由Andrea Ligios建议)下拉:
<tr>
<td>
<s:select
name="destination.idDest"
label="the destination"
list="drop"
listKey="idDest"
listValue="nameDest"
headerKey="0"
headerValue="Chose a destination" />
</td>
</tr>
我收到了这个错误
1.tag&#39;选择&#39;,字段&#39;列出&#39;,name&#39; destination.idDest&#39;:请求的列表键&#39; drop&#39;无法解析为集合/数组/映射/枚举/迭代器类型。例如:人或人。{name}
答案 0 :(得分:1)
是的,您正在向String
变量发送Destination
,类型不匹配,因此拦截器堆栈会引发错误并从正常执行的操作中更改工作流程您调用的方法,为您的操作定义的INPUT
结果。
由于您尚未定义任何INPUT
结果,因此会引发您看到的错误消息。
阅读how the INPUT result works(该模式对转化和验证都很常见。)
然后你需要
listKey
name
属性。例如,如果“目标”包含id
和nameDest
字段,则需要设置:
<s:select name = "destination.id"
label = "the destination"
list = "drop"
listKey = "id"
listValue = "nameDest"
headerKey = "0"
headerValue = "chose a destination" />