0

假设我们有:

车类:

public class Car{
   private String model;
   private String brand;
   private Collection<People> owners;

   //constructor,getters and setters
}

班级人:

public class People{
   private Car car;
   private String name;
   private Gender gender;

   //constructor,getters and setters
}

班级性别:

public class Gender{
   private Char gender;

   //constructor,getters and setters
}

然后,如果我想将集合所有者传递给我的视图:

<body>
        <h1>Car detail: </h1>
        <h2>Owners: </h2>
        <table>
            <form:form modelAttribute="owners" method="post" action="processOwnersSelection.htm">
                <tr>
                    <td>
                        <ul>
                            <form:checkboxes element="li" path="owners" items="${owners}"></form:checkboxes>
                        </ul>
                    </td>
                </tr>
                <tr>
                    <td>
                        <button type="submit">Next</button>
                    </td>
                </tr>
            </form:form>
        </table>               
    </body>

通过我的控制器:

@RequestMapping(value = "/selectOwners")
    protected ModelAndView showOwnersSelection() throws ServiceException{
        return new ModelAndView("car/ownerSelection", "owners", super.getService().getAllOwners());
    }

笔记。这将用于将多个所有者(存在于数据库中)连接到汽车。

我会收到一个错误:

org.springframework.beans.NotReadablePropertyException:bean 类 [java.util.HashMap$Values] 的无效属性“所有者”:Bean 属性“所有者”不可读或具有无效的 getter 方法:getter 的返回类型是否与设置器的参数类型?


据我了解,Spring 通过使用 PropertyEditor 或 Converter 的实现来转换这些?

所以我应该手动写一个,但是 Spring 怎么知道我做了一个他(或她)必须使用的?一个人应该是什么样子?

4

2 回答 2

0

常见

 <form:form modelAttribute="owners" method="post" 
  action="processOwnersSelection.htm">

modelAttribute 应该是对象的引用名称,该对象包含其形式下的所有属性。

我们可以使用 spring 标签的 path 属性来访问它们,例如复选框或 whaever。

我假设您使用owners的是 modelAttribute,它可能不是People您的控制器内的类模型。

我不知道你如何在控制器中定义它。

我认为您必须使用People参考模型属性而不是owners在下面的代码中

 <form:form modelAttribute="owners" method="post" 
      action="processOwnersSelection.htm">

因为path="owners"它试图在您为内部控制器owners定义的类中查找属性。modelAttribute="owners"

请正确检查。

于 2014-05-27T18:20:47.047 回答
0

Spring 3 Type Converter SPI 取代了 JavaBean PropertyEditors。

<mvc:annotation-driven />在配置文件中会自动安装默认类型转换器。我们可以使用 @DateTimeFormat 或 @NumberFormat 等注释覆盖默认值。

对于自定义字段类型,我们可以遵循以下约定而不是配置:

  1. 定义静态 valueOf(String) 方法或 Constructor(String) 以从其 String 表示中解析您的值

  2. 实现 toString() 以打印您的值以供显示

有关更多详细信息,请参阅此链接

于 2014-05-27T18:46:25.593 回答