Jsf p:dataTable with paginator:如何使用p:printer打印没有paginator的所有行

Jsf p:dataTable with paginator:如何使用p:printer打印没有paginator的所有行,jsf,primefaces,printing,datatable,paginator,Jsf,Primefaces,Printing,Datatable,Paginator,在使用分页器的情况下,我需要打印所有页面。当我使用并指定datatable作为目标时,它只打印带有分页控件的第一页。如何打印表中的所有行 好的,我实际上能够达到预期的行为,但方式非常不愉快 首先,p:printer似乎只是从xhtml页面中按id获取DOM元素并将其传递给打印机。因此,为了能够打印一个完整的表,首先应该重新呈现它 我的想法是在不使用分页器的情况下重新呈现表格,刷新表格并将其传递给打印机,然后恢复表格的状态。为了能够做到这一点,我创建了两个按钮:一个用于触发表重新呈现,另一个用于将

在使用分页器的情况下,我需要打印所有页面。当我使用并指定datatable作为目标时,它只打印带有分页控件的第一页。如何打印表中的所有行

好的,我实际上能够达到预期的行为,但方式非常不愉快

首先,p:printer似乎只是从xhtml页面中按id获取DOM元素并将其传递给打印机。因此,为了能够打印一个完整的表,首先应该重新呈现它

我的想法是在不使用分页器的情况下重新呈现表格,刷新表格并将其传递给打印机,然后恢复表格的状态。为了能够做到这一点,我创建了两个按钮:一个用于触发表重新呈现,另一个用于将该表传递给打印机并恢复其状态

第一个按钮可见,是用户按下打印的按钮。它调用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>
p:blockUI可以涵盖所有这些疯狂行为,因为多表更新会导致快速故障


这个解决方案是作为解决办法提出的,我认为这不是一个正确的方法。但我也不认为有其他方法可以使用p:printer完成所需的操作。

好的,我实际上能够实现所需的行为,但方式非常不愉快

首先,p:printer似乎只是从xhtml页面中按id获取DOM元素并将其传递给打印机。因此,为了能够打印一个完整的表,首先应该重新呈现它

我的想法是在不使用分页器的情况下重新呈现表格,刷新表格并将其传递给打印机,然后恢复表格的状态。为了能够做到这一点,我创建了两个按钮:一个用于触发表重新呈现,另一个用于将该表传递给打印机并恢复其状态

第一个按钮可见,是用户按下打印的按钮。它调用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>
p:blockUI可以涵盖所有这些疯狂行为,因为多表更新会导致快速故障


这个解决方案是作为解决办法提出的,我认为这不是一个正确的方法。但我也不认为有其他方法可以使用p:printer完成所需的工作。

对于您和所有未来的读者:所有Java代码都是不必要的。只要使用paginator={…}rows={…}而不是硬编码的值,那么实际上您不需要任何额外的bean逻辑,所有10k用户都可以看到这样的示例。很好,谢谢!这将真正简化实现。我自己怎么没有做到这一点。嗨@BalusC,我应该为paginator={…}rows={…}设置什么值?ThanksI编辑了我的答案,以实现Balusc向您和所有未来读者提出的更清晰、更简单的解决方案:所有这些Java代码都是不必要的。只要使用paginator={…}rows={…}而不是硬编码的值,那么实际上您不需要任何额外的bean逻辑,所有10k用户都可以看到这样的示例。很好,谢谢!这将真正简化实现。我自己怎么没有做到这一点。嗨@BalusC,我应该为paginator={…}rows={…}设置什么值?ThanksI编辑了我的答案,以实现BalusC提出的更清晰、更简单的解决方案