尽管组件验证失败,但JSF表单仍然提交

时间:2012-11-21 07:47:49

标签: java jsf java-ee primefaces

我正在使用Mojarra,Primefaces 3.4和JSF 2.1以及JPA / Hibernate来实现持久性。

最好将问题描述为具有bean和视图以及自定义验证器,其中我在具有验证器的字段中输入数字。验证器通过后端检查DB中的字段值,并防止创建重复对象。

验证可防止在所有情况下在第一次提交时提交重复对象。但是,有几次它只允许后续(第二次)提交通过并持久化(尽管对于具有验证器的此特定字段具有空值),即使第一次提交中存在失效失败。

我无法理解为什么会这样,但怀疑与范围有关的事情。我已经尝试了CDI的@ConversationScoped和@RequestScoped,以及MyFaces CODI @ViewAccessScoped。

@RequestScoped似乎“解决”了这个问题但是还有一些其他问题,即由于(可能)在第一次提交后没有保留这些值,它在第一次失效后根本无法持久存在。此外,标识符上还有一个AJAX调用,它将尝试从另一个系统检索客户数据。如果成功,所有其他字段应该是只读的,这是在客户数据检索过程中通过布尔集处理的。 @RequestScoped无法处理此问题,因为在第一次提交后,值会“丢失”。

整个代码非常广泛,如果您希望看到任何特定部分以便回复此问题,请与我们联系。

逐步澄清:

  1. 导航到页面。
  2. 尝试使用现有的唯一标识符和提交创建重复对象。
  3. 显示表单以及自定义验证程序错误。
  4. 第二次尝试提交同一页面(不重新加载页面)。
  5. 页面已成功提交并保留,但未提交唯一标识符且数据库中包含空值。
  6. 每次都不会发生这种情况,这是令人困惑的部分。然而,它可能发生在50%的情况下,没有我能检测到的模式。

0 个答案:

没有答案