12

我仍然是 SpringMVC 的新手(以及 jstl )。我正在尝试从对象列表的选择中填充选项。我找到了一种使用 c:forEach 的方法,但我一直认为必须有一种方法可以使 form:options 方法起作用。

我已经浏览过,关于 items 属性的官方文档我能找到的最接近的东西在这里>> http://static.springsource.org/spring/docs/2.0.x/reference/spring-form.tld .html#spring-form.tld.options

它说 items 属性用于

“用于生成内部‘选项’标签的集合、映射或对象数组”

我的困惑是它正在寻找什么样的集合、映射或对象数组。他们需要采用什么格式?它是专门寻找 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> 

完成我正在做的事情?

编辑这里的堆栈跟踪>> http://pastebin.com/2c5XBCmG

4

2 回答 2

24

Spring 文档说明了标签的items属性:form:options

items 属性通常由项目对象的集合或数组填充。itemValue 和 itemLabel 仅引用这些项目对象的 bean 属性(如果指定);否则,项目对象本身将被字符串化。或者,您可以指定一个项目映射,在这种情况下,映射键被解释为选项值,映射值对应于选项标签。如果同时指定了 itemValue 和/或 itemLabel,则 item value 属性将应用于 map 键,而 item label 属性将应用于 map value。

简而言之,如果您需要使用自定义 Bean 的列表作为 items 属性,您还需要使用itemValueanditemLabel属性。就个人而言,我更喜欢使用 Maps(LinkedHashMap特别是实例)来填充我的选择标签,但这只是个人喜好问题。

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

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

我将company属性用作itemValueand itemLabel,但您可以自由选择符合您要求的属性。

于 2013-03-20T16:29:26.210 回答
2

通常我用这样的弹簧标签来做:

<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:springform="http://www.springframework.org/tags/form"

于 2013-03-20T16:17:07.000 回答