【问题标题】:Reuse Component JSF2.1 with Facelets使用 Facelets 重用组件 JSF2.1
【发布时间】:2015-05-04 12:11:53
【问题描述】:

我正在使用:

  • JSF 2.1
  • RichFaces 4.5.2.Final
  • Omnifaces 2.0

我有一个表,我想作为数据表或子表重用,这取决于我使用组件的页面,我想放置,如果它不起作用,这是我的代码:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:a4j="http://richfaces.org/a4j"
      xmlns:rich="http://richfaces.org/rich"
      xmlns:f="http://java.sun.com/jsf/core"
      xmlns:ui="http://java.sun.com/jsf/facelets"
      xmlns:o="http://omnifaces.org/ui"
      xmlns:c="http://java.sun.com/jsp/jstl/core"
      xmlns:composite="http://java.sun.com/jsf/composite"
      xmlns:tablas="http://java.sun.com/jsf/composite/tablas"
      >

    <!-- INTERFACE -->
    <composite:interface>
        <composite:attribute name="listaPaqueteItems" required="true" />
        <composite:attribute name="subtable" required="false" default="false" />
    </composite:interface>

    <!-- IMPLEMENTATION -->
    <composite:implementation>


        <c:if test="#{!cc.attrs.subtable}"> 
            <rich:dataTable id="tabla_items_del_paquete"
                value="#{cc.attrs.listaPaqueteItems}"
                var="p"
                rowKeyVar="row_tabla_items_del_paquete"
                rows="10"
                rowClasses="odd-row, even-row"
                styleClass="stable">
        </c:if> 
        <c:if test="#{cc.attrs.subtable}">  
            <rich:collapsibleSubTable id="subtable">
        </c:if>
                <rich:column>
                    <f:facet name="header">
                        <h:outputText value="#" />
                    </f:facet>
                    <h:outputText value="#{row_tabla_items_del_paquete + 1}" />
                </rich:column>
                <rich:column>
                    <f:facet name="header">
                        <h:outputText value="#{msgs['abm.paquete.item.tabla.codigo']}" />
                    </f:facet>
                    <h:outputText value="#{p.producto.codigo}" />
                </rich:column>                  
                <rich:column colspan="2">
                    <f:facet name="header">
                        <h:outputText value="#{msgs['abm.paquete.item.tabla.nombre']}" />
                    </f:facet>
                    <b>
                        <h:outputText value="#{p.producto.nombre}" />
                    </b>
                </rich:column>
                <rich:column>
                    <f:facet name="header">
                        <h:outputText value="#{msgs['abm.paquete.item.tabla.descuento.final']}" />
                    </f:facet>
                    <h:outputText value="#{p.descuentoFinal}" />
                </rich:column>                  

        <c:if test="#{!cc.attrs.subtable}"> 
            </rich:dataTable> 
        </c:if> 
        <c:if test="#{cc.attrs.subtable}">  
            </rich:collapsibleSubTable> 
        </c:if>
    </composite:implementation>    

</html>

基本上问题是不是有效的 XHTML,任何想法来完成这个场景并尝试将此代码重用为表或子表,一个可能的想法是外部另一个模板中的 &lt;rich:colum&gt; 标记和数据表或子表中的包装器像这样:

            <rich:collapsibleSubTable
            expanded="#{false}"
            id="tabla_periodos"
            rowKeyVar="row_subtable"
            expandMode="client"
            value="#{p.periodoDescuentos}"
            var="per"
            rendered="#{not empty p.periodoDescuentos}"
            >
<!-- Include Columns-->
                </rich:collapsibleSubTable>

我认为这会奏效,但也许是另一种更好的方式。

【问题讨论】:

    标签: jsf-2 richfaces facelets


    【解决方案1】:

    您可以使用以下代码创建 facelet 标签:

    标签(myTable.xhtml):

         <c:if test="#{!subtable}"> 
            <rich:dataTable id="tabla_items_del_paquete"
                value="#{listaPaqueteItems}"
                var="p"
                rowKeyVar="row_tabla_items_del_paquete"
                rows="10"
                rowClasses="odd-row, even-row"
                styleClass="stable">
               <ui:insert>
             </rich:dataTable>
        </c:if> 
        <c:if test="#{subtable}">  
            <rich:collapsibleSubTable id="subtable">
               <ui:insert>
            </rich:collapsibleSubTable>
        </c:if>
    

    用法:

        <my:mytable>
           ... your dataTable content
        </my:mytable>
    

    【讨论】:

      猜你喜欢
      • 2012-04-06
      • 1970-01-01
      • 2011-03-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-26
      • 2014-06-29
      • 1970-01-01
      相关资源
      最近更新 更多