<f:facet>标签是什么?何时应该使用它?

58

我一直在遇到标签的问题。我参考了其他使用它的代码示例,但不确定它的具体作用。

我编写的代码在方法上与其他能够工作的代码完全相同,除了我用标签将它包裹起来。当我在我的代码周围添加这个标签后,在部署时下拉框就会消失。有人能提供一个原因或者告诉我何时以及如何使用facet吗?

这是我的代码,我不会添加bean代码,因为它们只是基本的getter和setter,我认为它们不会导致问题。

<f:facet name="actions">
    <p:selectOneMenu id="SwitchWeekDrpDwnMenu" 
                     value="#{depotWorkloadBean.selectView}"
                     partialSubmit="true">
        <p:ajax update="mainForm" 
                listener="#{depotWorkloadBean.updateView}" />
        <f:selectItem itemLabel="Day view" itemValue="Day"/>
        <f:selectItem itemLabel="01/01/2014" itemValue="Week"/>
    </p:selectOneMenu>
</f:facet>
如果我删除 facet 标签,下拉框会显示出来,但是与豆类一起使用时功能不正常。

2
什么是 facet 的容器?如果容器不支持具有该名称的 facet,则单独的 facet 是无用的。因此,您的标题(问题)与您的问题不太相关。如果您认为答案是您需要的,请接受它。 - Kukeltje
1个回答

22

Facet表示容器组件内的一个命名部分。例如,您可以为dataTable组件创建一个标题和一个页脚facet。 https://web.archive.org/web/20170828020413/http://www.jsftoolbox.com/documentation/help/12-TagReference/core/f_facet.html

当您想创建使用用户某些代码(比如包装器)的组件时,这非常有用。

例如,当您想创建一个隐藏长文本并显示其短版本的组件时。您可以只使用元素主体,但是那样您只会得到一个值。如果您想从用户获取短版和长版,则不能使用一个值(不使用一些鉴别器)。只需使用facet,并指定哪个是长版和哪个是短版即可完成此操作。

<textShortener>
    <f:facet name="short">
        This text is short.
    </f:facet>
    <f:facet name="long">
        This text is too <b>long</b> to be showed when page loads. User have to click the button after the short text to show this.
    </f:facet>
</textShortener>

是的,这可以(而且应该)使用jsf模板来完成,但我希望你明白了。

回答问题:你只是在普通的xml中定义了facet,没有人请求它,所以也没有人处理它-这就是为什么它既没有抛出错误也没有显示任何内容。


为什么像h:column这样的组件需要一个包装器?请解释一下。 - Navin Israni
在链接的示例中,使用方法很明显。您可以在 facet 中获取标题,然后 h:column 的子元素(在示例中为 h:outputText)是列的实际内容。您需要区分它们。(如果标题只是纯文本,则可以使用 h:column 的参数,但是这样您就会遇到定义 CSS 和其他内容的问题...) - Flowy
你在哪里看到语法错误,为什么认为这个例子不好? - Flowy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接