在JSF Composite Component

时间:2015-10-28 10:30:01

标签: jsf-2 primefaces

我创建了一些复合组件,需要在Primefaces p:dataExporter中传递可用作“目标”的属性,在p:columnToggler中传递“datasource”。 第一个attr。 “FormID”按预期工作,但第二个“tableID”没有。它在contextMenu下使用。代码:

<composite:interface>
   <composite:attribute name="FormID"/>
   <composite:attribute name="tableID"/>
</composite:interface>

<composite:implementation>

<p:contextMenu for="#{cc.attrs.FormID}"> 
    <p:submenu label="Export">
        <p:menuitem value="Export to XLS" onclick="$('#exportToXLS').click()" />
    </p:submenu>

    <p:menuitem value="Columns" onclick="$('#toggler').click()" />
</p:contextMenu>

<p:commandLink id="toggler" type="button" />
    <p:columnToggler datasource="#{cc.attrs.tableID}" trigger="toggler" />

<p:commandLink id="exportToXLS" ajax="false" width="24">
    <p:dataExporter type="xls" target="#{cc.attrs.tableID}" 
        fileName="fileXls" />
</p:commandLink>

</composite:implementation

这是带有代码的项目的github repo,其中出现了我的问题:https://github.com/ntokarsk/PrimefacesTest

1 个答案:

答案 0 :(得分:0)

问题解决了。 我仍然不知道为什么以前的解决方案不起作用 - 但这个解决方案有效。我刚刚阅读了一些旧文章并了解到menuitem本身就是commandLink,所以我将p:dataExporter移动到menuItem中它起作用:D 1件事仍然缺失 - columnTrigger不起作用。有什么想法吗?

这是代码:

<composite:interface>

   

      

     <p:menuitem value="Export to XLS" ajax="false">
        <p:dataExporter type="xls" target=":#{cc.attrs.FormID}:#{cc.attrs.tableID}"
           postProcessor="#{edycjaDanychCentrumBean.postProcessXLS}"
           fileName="daneCentrumDataTable" />
     </p:menuitem>

     <p:menuitem value="Export to PDF" ajax="false">
        <p:dataExporter type="pdf" target=":#{cc.attrs.FormID}:#{cc.attrs.tableID}"
           fileName="daneCentrumDataTable" />            
     </p:menuitem>
  </p:submenu>

  <p:menuitem value="Delete" icon="ui-icon-close" />

  <p:menuitem id="toggler" value="Columns" icon="ui-icon-calculator">
     <p:columnToggler datasource=":#{cc.attrs.FormID}:#{cc.attrs.tableID}" trigger="toggler" />
  </p:menuitem>
  </p:contextMenu>
</composite:implementation>