gpt4 book ai didi

java - p 的重置值 :inputText in p:inplace when DB constraint validation failed

转载 作者:行者123 更新时间:2023-11-30 09:31:26 25 4
gpt4 key购买 nike

我有这个代码:

<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 ,以便在给定 ID 已存在时反转 bean 值并防止执行 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com