如何在使用primefaces打印机打印后重定向到页面?

时间:2014-05-21 15:54:42

标签: jsf jsf-2 primefaces

我使用过primefaces打印机,想要在打印后重定向到上一页。我使用的打印机如下:

   <p:commandButton  value="Print" type="button" title="Print" actionListener="#{currentpage.redirect}"> 
        <f:ajax execute="@this"/>
        <p:printer target="printer" />
    </p:commandButton> 

在currentpage bean的重定向方法中我删除了工作正常的记录,但是如果我尝试将其重定向到上一页,则它没有做任何事情。

public void redirect(ActionEvent actionevent) {
              /* Deleted the record */ 
}

如果我可以这样做或任何其他方式,请指导我。 提前谢谢。

1 个答案:

答案 0 :(得分:3)

您的代码中存在一些误解:

  • actionListener方法无法触发重定向。这可以在action
  • 中完成
  • ajax请求无法触发重定向。 Ajax旨在作为对服务器的异步请求,并将所需结果发送到当前视图,并处理响应以更新视图,而无需刷新页面,也无需导航。
  • 如果使用Primefaces组件,您应该使用它们以提高页面效率。例如,<p:commandButton>应该与<p:ajax>而不是<f:ajax>一起使用。但在这种情况下,<p:commandButton>已经内置了ajax功能,因此不需要使用任何这些ajax组件。

知道这一点后,您知道您的设计应该改为:

<p:commandButton value="Print" type="button" title="Print"
    action="#{currentpage.redirect}" process="@this">
    <p:printer target="printer" />
</p:commandButton>

方法声明:

//parameterless
public void redirect() {
    /* Deleted the record */ 
}

PrimeFaces允许您在使用oncomplete属性完成ajax请求时添加行为。此属性接收javascript函数的名称,该函数将在ajax请求完成时立即调用而不会出现问题。在此方法中,您可以为重定向添加逻辑:

<p:commandButton value="Print" type="button" title="Print"
    action="#{currentpage.redirect}" process="@this" oncomplete="redirect()">
    <p:printer target="printer" />
</p:commandButton>

<script type="text/javascript>
    redirect = function() {
        window.location.href = '<desired url>';
    }
</script>