在打开新窗口之前验证字段

时间:2013-10-11 20:07:24

标签: jsf primefaces commandbutton

我有这个命令按钮:

<p:commandButton action="#{reportBB.createReport}" ajax="false" id="createReport" onclick="form.target='_blank'" value="#{msg['create.report']}" />

这会打开一个新页面并加载pdf报告。它始终打开新页面,然后验证必填字段。我需要首先验证所有必填字段是否已填写,然后打开新页面。

这可能吗?我该怎么办?

1 个答案:

答案 0 :(得分:1)

您首先需要将onclick更改为使用oncomplete。然后将其执行与请求变量的验证状态联系起来:

<p:commandButton action="#{reportBB.createReport}" ajax="false" id="createReport" oncomplete="if (!args.validationFailed){form.target='_blank'}" value="#{msg['create.report']}" />

您必须切换到oncomplete的原因是oncomplete在处理 JSF请求后运行,至少达到验证/转换阶段。在验证阶段,请求的状态已设置,并且它基于您将显示PDF的状态。由于同样的原因,onclick为时尚早。

args对象是PF对象,带有一些有用的信息。我上面的代码片段会询问它是否有请求的验证状态。

我相信这是你问题的核心。关于实际验证我认为你的形式中的多个字段的一些指示:

  1. 最简单的方法是在您正在验证的输入组件上设置immediate="true"。这样,如果验证失败,则永远不会调用命令按钮的操作。您需要确保的是命令按钮的形式与输入组件的形式相同。

  2. 您可以使用omnifaces validateAll组件在一个位置验证多个字段

  3. 另一种方法是,当表单中的所有字段都通过验证时,禁用命令按钮并启用它。