2016-07-15 52 views
0

翻翻一些PrimeFaces代码的应用程序,我注意到以下行:PrimeFaces Datatable - f:facet实际在做什么?

<f:facet name="header">#{trainSearch.trainCount} Trains</f:facet> 

它看起来就像是压倒一切的头,这是有道理的,但也有人在更详细一点解释这样对我?

这行代码实际发生了什么?

完整代码如下:

  <p:dataTable id = "results" value = "#{trainSearch.trains}" var = "train"  rendered="#{not empty trainSearch.trains}" styleClass = "train-search-table horizontal-border"> 
       <f:facet name="header">#{trainSearch.trainCount} Trains</f:facet> 
       <p:column headerText = "Train ID"> 
        <p:panelGrid columns="1" styleClass = "train-id-grid" layout = "grid"> 
         <h:outputText styleClass = "train-id-label" value="#{train.trainI}"/> 
         <h:outputText value="#{train.originCityState} > #{train.destinationCityState}" /> 
        </p:panelGrid> 
       </p:column> 
       <p:column headerText="Scheduled Departure"> 
        <h:outputText value="#{train.formattedScheduledDepartureText}" /> 
       </p:column> 
       <p:column headerText="Scheduled Arrival"> 
        <h:outputText value="#{train.formattedScheduledArrivalText}" /> 
       </p:column> 
       <p:column headerText="Loco Count"> 
        <h:outputText value="#{train.locoCount}" /> 
       </p:column> 
       <p:column headerText="Car Count"> 
        <h:outputText value="#{train.carCount}" /> 
       </p:column> 
      </p:dataTable> 

回答

4

小面JSF用于自定义组件的渲染,而不触及它的代码,例如在数据表,在那里你可以把自定义代码中的数据表头中的标头小,而无需触摸实际的PrimeFaces数据表代码。

DataTableRenderer(写入datatable的html代码的类)获取您放置在facet中的xhtml代码并将其呈现在div内。

你可以在方法的DataTableRendererencodeFacet看到这一点:

protected void encodeFacet(FacesContext context, DataTable table, UIComponent facet, String styleClass) throws IOException { 
    if(facet == null) 
     return; 

    ResponseWriter writer = context.getResponseWriter(); 

    writer.startElement("div", null); 
    writer.writeAttribute("class", styleClass, null); 

    facet.encodeAll(context); 

    writer.endElement("div"); 
} 

线facet.encodeAll(context);使你把里面的小面的HTML代码,在RENDER_RESPONSE JSF阶段。

相关问题