的密码创建一个单独的@Transient String
领域,从CRUD输入要填充:
@Password
@Transient
public String password;
然后从你的散列字段中删除@Required
注解。它不需要从CRUD填充。
接下来,创建一个新的方法,并与@PrePersist
注释,所以它会被执行的模型保存之前:
@PrePersist
public void prePersist() throws Exception {
this.hash = Codec.hexMD5(this.password.getBytes());
}
UPDATE:
要让@Transient
场出现在您的CRUD视图中,您需要自定义控制器的CRUD的blank
视图。打开外壳/命令提示符并执行以下命令(用你的控制器类的实际名称取代“your_controller”):
play crud:ov --template your_controller/blank
这应该在你的应用程序中的CRUD blank.html模板复制到views/your_controller/blank.html
。打开该文件,寻找#{crud.form /}
标签,并在它下面添加下面的代码:
<div class="crudField crud_password">
<label for="object_password">&{'label.password'}</label>
<input id="object_password" type="password" name="object.password" value="" />
<span class="crudHelp"></span>
</div>
密码字段现在应该出现在其他表单字段后。
感谢您的回复。我正在探索在插入时触发哈希的数据库方式,但我会定义尝试您的响应。 – JuanToroMarty 2012-02-21 12:05:23
@Transient字段不显示在Users CRUD表单中。我做错了什么? – JuanToroMarty 2012-02-21 15:15:18
不,你说得对,我忘了@Transient字段不会自动出现在视图中。我用补充说明更新了我的答案。 – Tommi 2012-02-22 06:11:15