【问题标题】:Playframework JSR-303 validated "field" does not have a corresponding accessor for data bindingPlayframework JSR-303 验证的“字段”没有相应的数据绑定访问器
【发布时间】:2013-05-27 10:30:42
【问题描述】:

当我将以下代码添加到我的项目中时

Form<User> filledForm2 = userSignupForm.bindFromRequest();

它通过显示一条错误消息停止工作:

Execution exception
[IllegalStateException: JSR-303 validated property 'Password' does not have a corresponding accessor for data binding - check your DataBinder's configuration (bean property versus direct field access)]

我的User 班级是这样的:

class User{
String username;
String Password;
}

现在如何在java play框架中检查/修改DataBinder的配置?

【问题讨论】:

    标签: java web-applications playframework


    【解决方案1】:

    实际上这不应该发生,因为 Play 会自动生成 getter 和 setter,see Guillaume's comment

    因此,您的 IDE 可能会导致问题,例如Guillaume 对 Eclipse 的评论。或者您的 sbt 缓存已损坏并需要清理,您可以使用 play clean-all (read about it here) 进行清理

    顺便说一下,将Password 属性更改为password 可能会导致缓存重新生成,从而解决了问题。

    更新:

    对于使用 activator 的最新版本的 Play,以下似乎是最新的等价物:

    activator cleanactivator clean-files

    【讨论】:

    • 这就是正在发生的事情——发现它在 2.1.3 下也是一个问题。刚刚运行 play clean 并纠正了问题。
    • 2.2.1 中同样的问题。
    • activator cleanactivator clean-files 适用于 play 2.4.6
    • activator clean 和 activator clean-files 也适用于 play 2.5
    • 我在从 IDE(IntelliJ 2018.1 社区版)运行 play-2.6(2.6.15、2.6.17)时也遇到了同样的问题。解决方案非常相似。我从项目文件夹中的命令行运行了以下命令:sbt,然后是 cleanrun
    【解决方案2】:

    遇到同样的问题...

    要消除此错误,您应该将变量定义为公共变量。

    class User{
       public String username;
       public String password;
    }
    

    【讨论】:

    • 我把它们公开了,问题就在那里。
    【解决方案3】:

    我的环境是 Mac OS X 10.9.5 并运行带有 Vagrant 的 CentOS 7。在 CentOS 上发生了同样的问题,但在 Mac OS 上却没有。 Play Framework 版本为 2.3.8。

    下面的命令在我的情况下不起作用:

      activator clean
      activator clean-files
    

    虽然很奇怪,但我必须定义 getter 和 setter 才能在 CentOS7 上成功运行 Play Framework,如下所示:

    @Entity
    public class Message extends Model{
    
        @Id
        public long id;
    
        @Constraints.Required
        public String name;
    
    
        //Add getter and setter to work successfully...
        public long getId() {
            return id;
        }
    
        public void setId(long id) {
            this.id = id;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    }
    

    【讨论】:

      【解决方案4】:

      我在尝试使用 POJO 验证 int 字段时遇到了同样的错误 @Min(value = 0)

      通过将注释放在getter上并结合我的bean中的@Valid来解决。

      【讨论】:

        【解决方案5】:

        我在使用activator dist之前使用activator clean &amp;&amp; activator clean-files解决了这个问题

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-09-29
          • 2011-10-23
          • 2015-07-31
          • 1970-01-01
          • 2016-02-25
          • 1970-01-01
          • 1970-01-01
          • 2016-06-21
          相关资源
          最近更新 更多