SpringMVC表单:选项项属性:它到底有什么期望?

时间:2013-03-20 14:31:13

标签: spring-mvc jstl

我还是SpringMVC的新手(和jstl一样)。我正在尝试从对象列表中选择一个选项。我已经找到了一种方法来使用c:forEach,但我一直认为有一种方法可以使表单:选项方法工作。

我浏览了一下,关于items属性的官方文档中我能找到的最接近的东西是>> http://static.springsource.org/spring/docs/2.0.x/reference/spring-form.tld.html#spring-form.tld.options

它表示items属性是

  

“用于生成内部'选项'标签的集合,地图或对象数组”

我的困惑是它正在寻找什么样的Collection,Map或对象数组。他们需要采用什么格式?它是否专门寻找String类型的Collection或数组?我可以使用

吗?
List<MyObject>

如果是这样的话,MyObject必须拥有什么才能使它有效(即方法,变量)?

目前,当我尝试使用MyObject时,我得到一个例外 -

  

ConverterNotFoundException:找不到能够从类型com.example.MyObject转换为类型java.lang.String

的转换器

我需要制作转换器吗?那会怎么样?那会怎么样?我用谷歌搜索了这个错误信息,并没有真正发现任何特定于我正在尝试做的事情......(大多数是关于Roo的结果)

MyObject类如下所示:

public class MyObject{
    private String company;
    private Customer customer;
    private Address customerAddress;

    public String getCompany() {
        return company;
    }

    public void setCompany(String company) {
        this.company = company;
    }

    public Customer getCustomer() {
        return customer;
    }

    public void setCustomer(Customer customer) {
        this.customer = customer;
    }

    public Address getCustomerAddress() {
        return customerAddress;
    }

    public void setCustomerAddress(Address customerAddress) {
        this.customerAddress = customerAddress;
    }
}

我试图这样使用它:

<form:select path="myObjectList">
    <form:option value="0"/>
    <form:options items="myObjectList" /> 
</form:select>

有没有人明确知道这种方法的错误是什么?或者,我应该使用

List<String> 

完成我正在做的事情?

编辑这里是堆栈跟踪&gt;&gt; http://pastebin.com/2c5XBCmG

2 个答案:

答案 0 :(得分:20)

Spring Documentation说明items标记的form:options属性:

  

items属性通常使用集合或数组填充   项目对象。 itemValue和itemLabel只是引用bean   这些项目对象的属性,如果指定的话;否则,该项目   对象本身将被字符串化。或者,您可以指定   项目的映射,在这种情况下,映射键被解释为选项   值和地图值对应于选项标签。如果是itemValue   和/或itemLabel碰巧也被指定为项目值   属性将应用于map键和item label属性   适用于地图值。

简而言之,如果您需要使用自定义Bean列表作为项属性,则还需要使用itemValueitemLabel属性。就个人而言,我更倾向于使用地图 - LinkedHashMap个实例来填充我的选择标记,但这只是一种品味。

调整Spring文档中的示例,您的代码应如下所示:

 <form:select path="commandAttribute">
      <form:option value="-" label="--Please Select"/>
      <form:options items="${countryList}" itemValue="company" itemLabel="company"/>
 </form:select>

我使用company属性作为itemValueitemLabel,但您可以自由选择符合您要求的属性。

答案 1 :(得分:2)

Usualy我正在使用这样的spring标签:

<springform:select path="myObjectList" id="selected_company">
    <springform:option value="0" label="--- Select One ---"></springform:option>
    <springform:options items="${myObjectList}" itemValue="company" itemLabel="company"></springform:options>
</springform:select>

不要忘记包含名称空间声明: 的xmlns:弹簧形= “http://www.springframework.org/tags/form”