Bud*_*tne 1 printing datatable jsf paginator primefaces
在<p:dataTable>with paginator中,我需要打印所有页面.当我使用<p:printer>并将数据表作为目标时,它只打印带有分页控件的第一页.如何打印表格的所有行<p:printer>?
好吧,我实际上能够以一种非常不愉快的方式实现所期望的行为.
首先,似乎p:printer只需从xhtml页面获取一个id元素并将其传递给打印机.因此,为了能够打印完整的表,首先应该重新渲染它.
我的想法是重新渲染没有分页器的表,刷新它并传递给打印机,之后恢复表的状态.为了能够这样做,我创建了两个按钮:一个触发表重新呈现,另一个将该表传递给打印机并恢复它的状态.
第一个按钮是可见的,是用户按下以打印的按钮.它调用deactivatePaginator()方法来禁用分页并准备打印表视图.第二个按钮是隐藏的,是包含p:printer组件的实际按钮.它调用该activatePaginator()方法来恢复表视图.
这是生成的xhtml页面:
<p:dataTable id="table" value="#{someBean.list}" var="str" paginator="#{someBean.paginatorActive}" rows="#{someBean.paginatorActive ? 10 : 0}">
<p:column headerText="Header">
<h:outputLabel value="#{str}"/>
</p:column>
</p:dataTable>
<h:form id='frm'>
<p:commandButton value="Print" actionListener="#{someBean.deactivatePaginator()}"
oncomplete="$('#frm\\:print').click()"
update=":table"/>
<p:commandButton id="print" value="Actual print" style="display: none">
<p:ajax event="click" listener="#{someBean.activatePaginator()}" update=":table"/>
<p:printer target=":table" />
</p:commandButton>
</h:form>
Run Code Online (Sandbox Code Playgroud)
方法的实现非常简单.所有需要做的就是相应地设置paginatorActive标志.
@ViewScoped
@ManagedBean
public class SomeBean {
private boolean paginatorActive = true;
public void activatePaginator() {
paginatorActive = true;
}
public void deactivatePaginator() {
paginatorActive = false;
}
public boolean isPaginatorActive() {
return paginatorActive;
}
}
Run Code Online (Sandbox Code Playgroud)
所有这些疯狂都可以通过p:blockUI多表更新导致快速故障来解决.
建议使用此解决方案作为解决方法,我认为这不是一种正确的方法.但我也不认为还有另一种方法可以做到需要使用p:printer.
| 归档时间: |
|
| 查看次数: |
4861 次 |
| 最近记录: |