2

我有这个代码:

<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 由于 DB 约束而引发异常的情况有关。在这些情况下,我希望原地保持可编辑状态并且不更改值。目前,它在数据库级别失败,但我仍然看到 UI 对象上的值更改为不正确的值。

4

1 回答 1

2

您应该为组件包含一个验证方法或验证器,inputText以便反转 bean 值并防止执行onSave以便在给定 ID 已存在于数据库中时

故意尝试将记录插入数据库,希望数据库约束提供验证,这是一种模糊的数据安全实践。我并不是说数据库约束不好,我只是说您应该在尝试插入数据库之前尽一切努力验证和清理您的输入。

在托管 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}" ... />
于 2012-10-15T11:39:01.123 回答