我使用了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 */
}
如果我可以这样做或其他方式,请指导我。
在你的代码中有几个误解:
-
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>