jsf - PrimeFaces 数据表 - 什么是 f :facet actually doing?

标签 jsf jsf-2 primefaces

查看应用程序中的一些 PrimeFaces 代码,我注意到以下行:

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

看起来它覆盖了 header ,这是有道理的,但是有人可以更详细地向我解释一下吗?

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

完整代码如下:

           <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>

最佳答案

JSF 中的分面用于自定义组件的呈现,而无需触及其代码,例如数据表中的 header 分面,您可以在数据表 header 中放置自定义代码,而无需触及实际的 PrimeFaces 数据表代码。

DataTableRenderer(编写数据表 html 代码的类)获取您放入 facet 中的 xhtml 代码并将其呈现在 div 中。

您可以在 DataTableRenderer 的方法 encodeFacet 中看到这一点:

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); 行在 RENDER_RESPONSE jsf 阶段将您放入 facet 中的代码呈现为 html。

关于jsf - PrimeFaces 数据表 - 什么是 f :facet actually doing?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38403675/

相关文章:

jsf - 显示依赖于请求参数的动态图像

css - Primefaces 5 selectOneMenu 在 tabView 中渲染不正确

jsf - 如何在另一个托管 bean 中访问一个托管 bean 的属性

jsf-2 - JSF2(和 Primefaces): Form for fileupload within another "normal" form, 如何做到这一点?

jsf-2 - h :form rendered correctly, 但 h :commandLink doesn't get rendered correctly. 我必须在链接上单击两次

jsf-2 - 如何摆脱警告:PWC4011:无法将请求字符编码设置为UTF-8

primefaces - primefaces 中 richfaces 组件的替代方案

java - "class is not assignable"是什么意思?

jsf - Facelets 和 JSTL(将日期转换为字符串以在字段中使用)

java - JSF - 如何将许多值插入到数据库表中