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

Когда использовать f: view и f: subview

Я не уверен, в чем преимущества использования <f:view> и <f:subview>. Я заметил, что можно писать страницы JSF без их использования.

Каковы преимущества использования этих тегов?

4b9b3361

Ответ 1

< F: вид >

<f:view> полезен, если вы хотите явно указать/переопределить любой из доступных атрибутов, например locale, encoding, contentType и т.д. или хотите подключить некоторые фазовые прослушиватели. Например.

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

Если вы не укажете его, вместо этого будут использоваться только правильные значения JSF по умолчанию, что соответствует UIViewRoot#getLocale(), UTF-8 и ближайшему совпадению заголовка запроса Accept. Следует отметить, что ближайшее совпадение заголовка запроса Accept не всегда полностью верно. Иногда это приводит к application/xhtml+xml из-за наличия расширения .xhtml в URL-адресе в случае Facelets, и веб-браузер не настроен на его интерпретацию как text/html по умолчанию (например, MSIE). Вы действительно хотели бы избежать этого неправильного типа содержимого, явно установив его на text/html.

Обратите внимание, что неважно, куда вы помещаете его в шаблон. Вы можете даже разместить его в клиенте шаблона как непосредственный дочерний элемент <ui:define>. Тем не менее, каноническое место является непосредственным дочерним элементом <html> и, таким образом, обертывает как <h:head>, так и <h:body>. Это также способ, как это делается в предыдущем JSP, где это действительно необходимо. В Facelets это необязательно и учитывается как метаданные.

См. также:


< F: подтаблицы >

<f:subview> создаст другой контекст контейнера именования. Это особенно полезно, если вы хотите повторно использовать файл include, который, в свою очередь, содержит идентификаторы фиксированного компонента более одного раза в одном корневом каталоге, в противном случае вы получите дубликаты идентификаторов компонентов. Однако, поскольку JSF 2.0 такой файл включения может быть лучшим составным компонентом, который сам по себе уже является контейнером именования.

Если вы не укажете его, это не повредит, если вы не будете повторно использовать компонент с тем же идентификатором, физически несколько раз в представлении.

См. также: