获取与struts s中所选值相关的对象:选择下拉列表

时间:2016-05-11 11:52:34

标签: jsp drop-down-menu struts2

我在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}

1 个答案:

答案 0 :(得分:1)

是的,您正在向String变量发送Destination,类型不匹配,因此拦截器堆栈会引发错误并从正常执行的操作中更改工作流程您调用的方法,为您的操作定义的INPUT结果。

由于您尚未定义任何INPUT结果,因此会引发您看到的错误消息。

阅读how the INPUT result works(该模式对转化验证都很常见。)

然后你需要

  1. 定义INPUT结果
  2. 在您的选择中指定listKey
  3. 在您的选择中指定包含密钥的name属性。
  4. 例如,如果“目标”包含idnameDest字段,则需要设置:

    <s:select name = "destination.id"
             label = "the destination" 
              list = "drop" 
           listKey = "id" 
         listValue = "nameDest" 
         headerKey = "0" 
       headerValue = "chose a destination" />