我有这个代码:
<p:inplace id="staffno" editor="true">
<p:ajax event="save" listener="#{staffbean.onSave}" update="staffnoInplace messages" />
<p:inputText id="staffnoInplace" value="#{staffbean.vieweditStaff.staffno}"/>
</p:inplace>
在 Staffbean.onSave() 中,我通过 JPA/Hibernate 存储它。如果成功的话,我不会遇到任何问题。它存储在数据库中。
我的问题与 Hibernate 由于数据库限制而抛出异常的情况有关。在这些情况下,我希望就地保持可编辑状态并且不更改值。目前,它在数据库级别失败,但我仍然看到 UI 对象上的值更改为不正确的值。
最佳答案
您应该为 inputText
组件包含一个验证方法或 validator ,以便反转 Bean 值并防止在给定 ID 已存在时执行 onSave
事件。数据库。
故意尝试将记录插入数据库并希望数据库约束提供验证是一种模糊的数据安全实践。我并不是说数据库约束不好,我只是说您应该在尝试插入数据库之前尽一切努力验证和清理您的输入。
在托管 bean 中包含验证方法,如下所示:
public void validateStaffNoId(FacesContext context, UIComponent component, Object value)
throws ValidatorException {
//Query DB to see if ID exists...
if (idExists()) {
//Throw validator exception
}
}
然后在您的 inputText 组件中只需添加属性:
<p:inputText ... validator="#{staffBean.validateStaffNoId}" ... />
关于java - p :inputText in p:inplace when DB constraint validation failed 的重置值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12892959/