如何在验证表单值后设置 p:commandLink 标签 "target" 值?

How to set p:commandLink tag "target" value after validating form value?

在我的项目中,我有一个命令 link,其中 "target" 属性值设置为“_blank”。因此,如果出现验证错误,它将打开一个新的 window 并显示错误消息。

但要求是如果验证正确它应该定位到新的 window 否则它将保留在同一页面并显示错误消息。

现有代码:

    <p:commandLink value="View"
     styleClass="view_link" 
     ajax="false"
     action="#{bean.someMethod('preview')}" 
     target ="_blank"  />

我的解决方案:

    <p:commandLink value="View"
    styleClass="view_link" 
    ajax="false" 
    action="#{bean.someMethod('preview')}"
    target="#{bean.target}">
    <p:ajax listener="#{bean.handelAjaxBehavoiurEvent}"/>
    </p:commandLink>

在 listner 方法中,我正在验证表单并为 p:commandlink 设置目标值。但它不起作用。

预期结果:当我单击 link 时,它应该验证表单值。如果值正确,则在浏览器中打开一个新选项卡并预览 pdf 文件。否则在现有页面上显示错误消息。

这就是为什么在检查 link 本身时它会打开新的。我想在表单验证后设置目标属性的值。

这就是我是如何做这些事情的:

我有一个 xhtml 页面可以查看 任何 PDF(即 mypdfviewer.xhtml)。 该 bean 设置了一些 return 参数,例如 validationOk、pdfname、viewoptions 等,并通过 addCallbackParam() 设置了这些参数 return。在 oncomplete 中,我查找这些值,如果可以,则打开新选项卡。

对话:

<p:commandLink ajax="true" value="View" action="#{bean.someMethod('preview')}" oncomplete="return myPdfView(args)"/>

豆子:

public void someMethod(String what) {
  ...
  RequestContext.getCurrentInstance().addCallbackParam("validationOk", true);      
  RequestContext.getCurrentInstance().addCallbackParam("pdfFile", myfile);

JavaScript:

function myPdfView(args) {
  if(args && args.validationOk) {
    window.open("mypdfviewer.xhtml?file=" + args.pdfFile, '_blank');
  }
}