首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring注册自定义PropertyEditor

Spring注册自定义PropertyEditor
EN

Stack Overflow用户
提问于 2014-05-27 17:42:55
回答 2查看 1.1K关注 0票数 0

假设我们有:

级车:

代码语言:javascript
复制
public class Car{
   private String model;
   private String brand;
   private Collection<People> owners;

   //constructor,getters and setters
}

阶级人士:

代码语言:javascript
复制
public class People{
   private Car car;
   private String name;
   private Gender gender;

   //constructor,getters and setters
}

班级性别:

代码语言:javascript
复制
public class Gender{
   private Char gender;

   //constructor,getters and setters
}

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

代码语言:javascript
复制
<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>

我的主计长:

代码语言:javascript
复制
@RequestMapping(value = "/selectOwners")
    protected ModelAndView showOwnersSelection() throws ServiceException{
        return new ModelAndView("car/ownerSelection", "owners", super.getService().getAllOwners());
    }

请注意。这将用于连接多个车主(谁存在于out DB)到一辆汽车。

我会得到一个错误:

org.springframework.beans.NotReadablePropertyException:无效属性bean类的‘所有者’:Bean属性‘所有者’是不可读的,或者有一个无效的getter方法: getter的返回类型与setter的参数类型匹配吗?

据我所知,Spring通过使用PropertyEditor或转换器的实现来转换这些?

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-05-27 18:46:25

弹簧3型转换器SPI取代JavaBean PropertyEditors。

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

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

  1. 定义静态valueOf( String )方法或构造器(String),以从其字符串表示形式解析值
  2. 实现toString()以打印您的值以供显示

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

票数 0
EN

Stack Overflow用户

发布于 2014-05-27 18:20:47

见常见

代码语言:javascript
复制
 <form:form modelAttribute="owners" method="post" 
  action="processOwnersSelection.htm">

modelAttribute应该是对象的引用名称,它保存其形式下的所有操作。

我们可以使用spring标记的path属性来访问它们,比如复选框或其他人。

我向您保证,您正在使用owners作为modelAttribute,它可能不是您的控制器中的People类的模型。

我不知道你是怎么在控制器里定义的。

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

代码语言:javascript
复制
 <form:form modelAttribute="owners" method="post" 
      action="processOwnersSelection.htm">

因为path="owners",它试图在控制器中为modelAttribute="owners"定义的类中找到owners属性。

请仔细检查一下。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23895715

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档