验证表单值后如何设置p:commandLink标记的“目标”值?

时间:2018-07-13 10:56:13

标签: primefaces jsf-2 commandlink

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

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

现有代码:

    <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设置目标值。但这不起作用。

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

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

1 个答案:

答案 0 :(得分:0)

这就是我做这些事情的方式:

我有一个xhtml页面来查看任何 PDF(即mypdfviewer.xhtml)。 Bean设置了一些返回参数,例如validationOk,pdfname,viewoptions等,并通过addCallbackParam()返回这些参数。在oncomplete中,我会寻找这些值,如果可以,请打开新标签。

对话框:

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

Bean:

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');
  }
}