Playframework JSR-303validation的“字段”没有相应的数据绑定访问器
当我将以下代码添加到我的项目中时
Form 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的配置?
实际上这不应该发生,因为Play会自动生成getter和setter, 请参阅Guillaume的评论 。
因此,您的IDE可能会导致问题,例如Guillaume对Eclipse的评论。 或者您的sbt缓存已损坏且需要清理,您可以通过play clean-all
( 在此处阅读 )
顺便说一下 ,将Password
属性更改为password
可能会导致重新生成缓存,从而解决了问题。
更新:
对于使用activator
更新版本的Play,似乎以下是最新的等价物:
activator clean
和activator clean-files
我的环境是Mac OS X 10.9.5并使用Vagrant运行CentOS 7。 在CentOS上遇到了同样的问题,但在Mac OS上却没有。 Play Framework版本是2.3.8。
下面的commnad在我的情况下不起作用:
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; } }
我在使用activator dist
之前使用activator clean && activator clean-files
修复了这个问题
我尝试使用@Min(value = 0)
validationPOJO中的int
字段时遇到了同样的错误。
解决方法是将getter中的注释与我的bean中的@Valid
结合使用。
有同样的问题……
要删除此错误,您应将变量定义为public。
class User{ public String username; public String password; }