Podczas korzystania z szablonów, gdzie należy zadeklarować?

Zrobiłem duży postęp w konwersji moich aplikacji JSF na strony z możliwością oznaczania książek, ale zastanawiam się, czy robię to we właściwy sposób. Jedno pytanie brzmi: czy istnieje miejsce najlepszych praktyk dla tagów f:metadata?

Moja typowa strona klienta wygląda tak:

    <ui:composition template="./pattern.xhtml">

        <ui:define name="content">

            <f:metadata>
                <f:viewParam name="userId" value="#{bean.userId}" />
                <f:viewParam name="startRecord" value="#{bean.startRecord}" />
                <f:viewParam name="pageSize" value="#{bean.pageSize}" />
                <f:viewParam name="sort" value="#{bean.sort}" />
            </f:metadata>

            <h1>Data Table</h1>

etc

Więc F:metadata i child F:viewparam tagi są napotkane w treści mojej strony. Mój wzór.szablon xhtml posiada również sekcję (o nazwie "header") to może umieścić te znaczniki w sekcji nagłówka. Czy należy je tam umieścić? Czy to robi różnicę, czy jestem ustawiony na jakiś efekt uboczny, którego jeszcze nie widziałem?

Author: BalusC, 2012-03-25

1 answers

Technicznie rzecz biorąc, nie ma znaczenia, gdzie zadeklarujesz <f:metadata> w widoku, o ile znajduje się on w widoku najwyższego poziomu (więc, gdy używasz szablonów, w kliencie szablonu, a więc nie w szablonie głównym). Gdy Widok zostanie zbudowany, metadane w zasadzie nie są częścią drzewa komponentów JSF, ale katalogu głównego widoku (który można uzyskać za pomocą ViewDeclarationLanguage#getViewMetadata()).

Najbardziej samodzielne dokumentowanie byłoby umieszczenie <f:metadata> w górnej części widoku, tak aby można było zobaczyć wszelkie metadane na pierwszy rzut oka bez konieczności przewijania do połowy lub dołu kodu źródłowego widoku.

Używając zwykłej strony, po prostu umieść ją tuż przed <h:head>.

<!DOCTYPE html>
<html lang="en"
    xmlns="http://www.w3.org/1999/xhtml"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:ui="http://java.sun.com/jsf/facelets"
>
    <f:metadata>
        <f:viewParam name="userId" value="#{bean.userId}" />
        <f:viewParam name="startRecord" value="#{bean.startRecord}" />
        <f:viewParam name="pageSize" value="#{bean.pageSize}" />
        <f:viewParam name="sort" value="#{bean.sort}" />
    </f:metadata>

    <h:head>
        ...
    </h:head>

    <h:body>
        ...
    </h:body>
</html>

Podczas korzystania z szablonów, zalecanym podejściem, jak opisano w dokumentacja znacznika <f:metadata> , byłoby zadeklarowanie oddzielnego <ui:insert name="metadata"> w szablonie głównym i pozwolić klientowi zdefiniować <f:metadata> w <ui:define name="metadata">.

<ui:composition template="/WEB-INF/pattern.xhtml"
    xmlns="http://www.w3.org/1999/xhtml"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:ui="http://java.sun.com/jsf/facelets"
>
    <ui:define name="metadata">
        <f:metadata>
            <f:viewParam name="userId" value="#{bean.userId}" />
            <f:viewParam name="startRecord" value="#{bean.startRecord}" />
            <f:viewParam name="pageSize" value="#{bean.pageSize}" />
            <f:viewParam name="sort" value="#{bean.sort}" />
        </f:metadata>
    </ui:define>

    <ui:define name="content">
        <h1>Data Table</h1>
        ...
    </ui:define>
</ui:composition>
 41
Author: BalusC,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-02-05 08:17:16