我正在使用Mojarra,Primefaces 3.4和JSF 2.1以及JPA / Hibernate来实现持久性。
最好将问题描述为具有bean和视图以及自定义验证器,其中我在具有验证器的字段中输入数字。验证器通过后端检查DB中的字段值,并防止创建重复对象。
验证可防止在所有情况下在第一次提交时提交重复对象。但是,有几次它只允许后续(第二次)提交通过并持久化(尽管对于具有验证器的此特定字段具有空值),即使第一次提交中存在失效失败。
我无法理解为什么会这样,但怀疑与范围有关的事情。我已经尝试了CDI的@ConversationScoped和@RequestScoped,以及MyFaces CODI @ViewAccessScoped。
@RequestScoped似乎“解决”了这个问题但是还有一些其他问题,即由于(可能)在第一次提交后没有保留这些值,它在第一次失效后根本无法持久存在。此外,标识符上还有一个AJAX调用,它将尝试从另一个系统检索客户数据。如果成功,所有其他字段应该是只读的,这是在客户数据检索过程中通过布尔集处理的。 @RequestScoped无法处理此问题,因为在第一次提交后,值会“丢失”。
整个代码非常广泛,如果您希望看到任何特定部分以便回复此问题,请与我们联系。
逐步澄清:
每次都不会发生这种情况,这是令人困惑的部分。然而,它可能发生在50%的情况下,没有我能检测到的模式。