我在标记<f:facet>
时遇到问题。我正在使用其他使用它的代码示例,但我不确定它的用途是什么。
我已经编写了一些代码,这些代码在方法上与我见过的其他代码完全相同,除非它包含在<f:facet name=actions>
标记中。当我在我的代码周围添加它时,我正在包装它的下拉框在我部署时消失。任何人都可以提出这方面的原因或让我深入了解如何以及何时使用方面?
这是我的代码,我不打算添加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标签,则会显示下拉框,但不能正常运行。
答案 0 :(得分:16)
facet表示容器组件中的命名部分。例如,您可以为dataTable组件创建页眉和页脚构面。 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,没有人请求它,所以没有人处理它 - 这就是为什么它没有抛出错误也没有显示任何内容。