【问题标题】:How to set p:commandLink tag "target" value after validating form value?验证表单值后如何设置 p:commandLink 标签“目标”值?
【发布时间】:2018-07-13 10:56:12
【问题描述】:

在我的项目中,我有一个命令链接,其中“目标”属性值设置为“_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 文件。否则在现有页面上显示错误消息。

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

【问题讨论】:

  • 我绝对知道为什么你上面的解决方案不起作用,但我必须想一个聪明的方法来做你想做的事。
  • @Melloware - 我有一个素面对话,里面有这个命令链接。当我单击命令链接时,我想验证表单数据。如果数据有效,那么它应该打开一个新选项卡并显示 PDF。否则它将在现有对话中显示错误消息。我从托管 bean 执行了一个 JavaScript 函数,并将 PDF 数据作为 base64 编码数据发送。但我需要一个更好的选择。

标签: primefaces jsf-2 commandlink


【解决方案1】:

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

我有一个 xhtml 页面来查看 任何 PDF(即 mypdfviewer.xhtml)。 bean 设置了一些返回参数,如validationOk、pdfname、viewoptions 等,并通过addCallbackParam() 返回这些参数。在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');
  }
}

【讨论】:

  • 感谢您的回答,但我正在使用 jasper 报告来获取 PDF。新的 JSF 页面不是必需的。每个浏览器都有自己的格式来预览 PDF。我只能使用它。
  • 您的要求:使用window.open(...)可以实现“打开一个新选项卡以预览pdf”
  • 是的,我用的是manged bean。我把那个东西放在我的cmets里。但它不适用于所有浏览器,因为我正在传递 Base64 编码的 byteArray。
  • 嗯,我以为你的问题是,切换正确的目标,而不是显示 pdf?
  • 是的,但我不想使用任何额外的 JSF 页面。
猜你喜欢
  • 2011-02-17
  • 1970-01-01
  • 1970-01-01
  • 2015-07-12
  • 1970-01-01
  • 1970-01-01
  • 2013-06-19
  • 1970-01-01
  • 2021-01-23
相关资源
最近更新 更多