Подтвердить что ты не робот

Что делает <f: facet> и когда я должен его использовать?

У меня возникли проблемы с тегом <f:facet>. Я работаю с другими примерами кода, которые его используют, но я не уверен, в чем именно он служит.

Я написал код, который в методе точно такой же, как и другой код, который я видел, который работает, за исключением того, что он заключен в тег <f:facet name=actions>. Когда я добавляю это вокруг моего кода, я выворачиваю его, когда я развертываю его. Любой, кто может предложить причину этого или дать мне представление о том, как и когда использовать грань?

Вот мой код, я не буду добавлять код bean, поскольку они просто базовые getters и сеттеры, и я не думаю, что они вызывают проблемы.

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

Если я удаляю тег грани, выпадающее поле отображается, но не работает так, как должно, с beans.

4b9b3361

Ответ 1

Фасет представляет именованный раздел в компоненте контейнера. Например, вы можете создать заголовок и фасет нижнего колонтитула для компонента dataTable. https://web.archive.org/web/20170828020413/http://www.jsftoolbox.com/documentation/help/12-TagReference/core/f_facet.html

Это полезно, когда вы хотите создать компонент, который использует некоторый код от пользователя (скажем, обертка).

то есть. когда вы хотите создать компонент, который скрывает длинный текст и показывает его короткую версию. Вы можете использовать только тело элемента, но тогда вы получите только одно значение, если вы хотите получить от пользователя короткую И длинную версию, то вы не можете сделать это в одном значении (без использования некоторого дискриминанта), просто используйте фасет и скажи, какая из них длинная, а какая короткая.

<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, никто не запрашивал его, поэтому никто не обрабатывал его - поэтому он не выдал ошибку и ничего не показал.