【问题标题】:Prevent confirmation dialog before validation in JSF在 JSF 中验证之前阻止确认对话框
【发布时间】:2015-09-15 09:43:37
【问题描述】:

我必须在按钮单击时显示一个确认对话框。表单有一个在 bean 中验证的字段。

                     <input type="text"
                        jsf:value="#{bean.userName}"/>                           
                   <button jsf:action="#{bean.deleteUser}"                                 
                        jsf:onclick="return confirm('Are you sure?')">
                        Delete User
                        <f:ajax execute="@form"
                            render="@form"                                        
                            onevent="commonEvent"/>
                    </button>

该字段在bean中是强制性的。

@NotEmpty()
@Email
public String getUserName() {
    //getters
}

在验证输入字段之前出现确认对话框。有没有什么办法让确认对话框只有在验证成功后才会出现。

是否可以在不更改 commonEvent 的情况下编写此内容。

【问题讨论】:

  • 您的问题是“错误的”...您问如何防止 javascript 客户端“确认”在 onclick 上不发生...回答:不要放在那里。您的问题应该是“如何在所有字段都验证后显示确认对话框”因为下面的答案是“有效”,但@lametaweb 应该搜索重复项。已经提出了很多很多问题,就像这个......见stackoverflow.com/questions/16795319/…
  • @Kukeltje。谢谢你的建议。我只使用 JSF,但相关问题解释了有关主要面孔的方法。
  • 您对我的解决方案有何看法?它对您的问题有效吗?
  • @lametaweb:您的解决方案与副本“相同”,但有一些小的差异(除了代码示例非常具体)。您的“标志”是重复的“回发/验证失败”,而您的“jsf 对话框”是一个 primefaces 对话框,或者就像您发布了一个“jsf 对话框”(无论是什么)。
  • @Patan:该解决方案的某些部分是通用的...请参阅非 PF 相关示例stackoverflow.com/questions/9617914/…

标签: jsf jsf-2 jsf-2.2


【解决方案1】:

如果您进行 Bean Validation 验证,那么您的验证将在服务器上执行,在 Process Validations 阶段。如果电子邮件有效,您将进入调用应用程序阶段,您的deleteUser 方法将执行。您可以将flag 属性添加到您的支持bean,并在输入deleteUser 方法时查看它。如果为 true,则保存实体,如果为 false,则将其更改为 true,不执行保存操作,让 JSF 循环再次呈现页面。在页面中,您应该编写一个模式对话框,当flag 为真时呈现该对话框。然后出现对话框,您按下 OK 按钮,然后,如前所述,实体将保存。因此,该解决方案要求您通过 JSF 对话框更改客户端确认对话框,因为验证是服务器端的。

【讨论】:

猜你喜欢
  • 2013-03-17
  • 1970-01-01
  • 2014-04-08
  • 2011-07-31
  • 1970-01-01
  • 2015-01-29
  • 1970-01-01
  • 1970-01-01
  • 2014-08-07
相关资源
最近更新 更多