web-dev-qa-db-de.com

Verwendung von f: view und f: subview

Ich bin mir nicht sicher, welche Vorteile die Verwendung von <f:view> Und <f:subview> Bietet. Mir ist aufgefallen, dass man JSF-Seiten schreiben kann, ohne sie zu verwenden.

Was sind die Vorteile der Verwendung dieser Tags?

44
Nick

<f: view>

Das _<f:view>_ ist nur nützlich, wenn Sie eines der verfügbaren Attribute wie locale, encoding, contentType, etc oder möchte einige Phasenlistener anhängen. Z.B.

_<f:view locale="#{user.locale}" encoding="UTF-8" contentType="text/html">
_

Wenn Sie es nicht angeben, werden stattdessen nur die normalen JSF-Standardeinstellungen verwendet, die UIViewRoot#getLocale(), _UTF-8_ und die genaueste Übereinstimmung von Accept Anforderungsheader sind. Es sollte beachtet werden, dass die engste Übereinstimmung mit dem Anforderungsheader von Accept nicht immer ganz stimmt. Manchmal führt dies dazu, dass _application/xhtml+xml_ aufgrund der _.xhtml_ -Erweiterung in der URL vorhanden ist, wenn Facelets und der Webbrowser nicht so konfiguriert sind, dass sie standardmäßig als _text/html_ interpretiert werden (wie MSIE). Sie möchten diesen falschen Inhaltstyp unbedingt vermeiden, indem Sie ihn explizit auf _text/html_ setzen.

Beachten Sie, dass es egal ist, wo Sie es in die Vorlage einfügen. Sie können es sogar als unmittelbares untergeordnetes Element von _<ui:define>_ in den Vorlagen-Client einfügen. Der kanonische Ort ist jedoch als unmittelbares Kind von _<html>_ und umschließt damit sowohl _<h:head>_ als auch _<h:body>_. Dies ist auch die Art und Weise, wie dies in Legacy-JSP durchgeführt wird, wo es tatsächlich erforderlich ist . In Facelets ist es optional und wird als Metadaten abgerechnet.

Siehe auch:


<f: subview>

Das _<f:subview>_ erstellt einen weiteren Namenscontainerkontext. Dies ist besonders nützlich, wenn Sie eine Include-Datei wiederverwenden möchten, die wiederum feste Komponenten-IDs mehr als einmal im selben Ansichtsstamm enthält. Andernfalls werden doppelte Komponenten-ID-Fehler angezeigt. Seit JSF 2.0 kann eine solche Include-Datei jedoch besser eine zusammengesetzte Komponente sein, die für sich genommen bereits ein Namenscontainer ist.

Wenn Sie es nicht angeben, kann es nicht schaden, wenn Sie eine Komponente mit derselben ID nicht mehrmals physisch in der Ansicht verwenden.

Siehe auch:

73
BalusC