【问题标题】:Spring 3 validation errorSpring 3 验证错误
【发布时间】:2010-10-24 14:49:09
【问题描述】:

我正在尝试让一些验证器与 Spring 3 一起使用。我不断收到错误消息:

org.springframework.beans.NotReadablePropertyException:bean 类 [java.lang.String] 的无效属性“名称”:bean 属性“名称”不可读或具有无效的 getter 方法:getter 的返回类型是否匹配setter 的参数类型?

我的问题是,这就是那个错误所指的。我相信在rejectValue 方法中,它在myobj 上调用getName()。是不是说 myobj.getName() 不存在?因为我可以告诉你确实如此。否则这个方法甚至不会编译。

public void validate(Object target, Errors errors) {
    MyObject myobj = (MyObject)target;

    String name = myobj.getName();
    if(name.length() >100 || name.length() < 10) {
        errors.rejectValue("name", "fieldLength");
    }
}

这是我的对象:

public class MyObject {

public MyObject() {
    super();
    // TODO Auto-generated constructor stub
}

private String name;

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

}

在我的jsp中:

<form:form name="MyForm" commandName="myobj" method="post" action="${testurl}">
    <table id="mytable" width="100%">

    <tbody>
      <tr>
        <td colspan="2">
            <form:errors path="name"/> 
        </td>
      </tr>

    <tr>
        <td>
            Name:
        </td>
        <td>
            <form:input path="name"/>
        </td>


    </tr>

    </tbody>
</table>

我的控制器:

@ActionMapping(params="myaction=test")
public void test(@ModelAttribute("myobj") MyObject myobj, BindingResult bindingResult, 
        ActionRequest request, ActionResponse response, SessionStatus sessionStatus)  {
    }
    testValidator.validate(myobj, bindingResult);
    if (!bindingResult.hasErrors()) {
        response.setRenderParameter("myaction", "nextpage");
    } else {
        response.setRenderParameter("myaction", "test");
    }
}

【问题讨论】:

  • 你能告诉我们MyObject类的代码吗?
  • 为什么错误信息是MyObj而不是MyObject
  • 复制和粘贴搞砸了,所以我不得不输入其中的一部分。我的错误。
  • 该消息应该会有所帮助:“of bean class [java.lang.String]”。
  • 这实际上对我没有帮助,因为我不确定该类应该是什么以及为什么它是 String。

标签: java spring validation


【解决方案1】:

这很可能告诉您某些 EL 表达式失败,因为 Spring 无法根据 getter/setter 签名确定“name”属性的类型。如果您向我们展示了(所有)“name”的 getter 和 setter 的声明,也许我们可以更具体一些。

【讨论】:

  • 我遇到了同样的问题,这是由于错误的发布请求(我以错误的方式发送数组数据)导致我的验证代码崩溃并出现同样的异常。
【解决方案2】:

令人讨厌的是,代码似乎一直都是正确的。我终于运行 maven clean 然后重建和重新部署,以及清除所有缓存等,现在它正在使用该代码。我将对其进行修改以尝试更接近我实际想要发生的事情(嵌套验证),然后看看我能得到什么。

【讨论】:

    【解决方案3】:

    您的问题与验证本身无关。我只能怀疑您粘贴的代码不是您的确切示例,而是受实际执行的代码启发而手工制作的代码。

    MyObject 属性name 肯定存在一些基本问题。我个人的猜测是,getter 是在 MyObject 的超类中定义的,只有 setter 在 MyObject 类中被重新定义(或覆盖)。

    无论如何,我能给您的最好建议是尝试提取代码的最小示例并尝试运行它。即使由于某些原因您无法与我们分享示例,也可以让您更轻松地找到问题的原因。

    【讨论】:

      【解决方案4】:

      这发生在我身上的 Spring Validator 一直抱怨我的域 POJO 上有两个不可读的属性。一个是java.lang.Boolean,另一个是java.lang.Integer,它们都有适当的JavaBeans 常规getter 和setter。

      经过一番挖掘后,我发现我初始化了布尔属性:

      @Value("T{Boolean.FALSE}")

      和整数属性:

      @Value("0")

      这是以前教学项目的残余。无论如何,一旦删除,那些烦人的不可读属性错误就停止了,验证器开始做它的工作。

      【讨论】:

        猜你喜欢
        • 2012-06-02
        • 2011-07-21
        • 1970-01-01
        • 2011-03-05
        • 2011-06-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多