Включить метатеги в xhtml [duplicate]

Типы ссылок по умолчанию равны null, чтобы указать, что они не ссылаются на какой-либо объект. Следовательно, если вы попытаетесь получить доступ к объекту, на который ссылаетесь, а его нет, вы получите исключение NullReferenceException.

Для Ex:

SqlConnection connection = null;
connection.Open();

Когда вы запускаете это кода, вы получите:

System.NullReferenceException: Object reference not set to an instance of an object.

Вы можете избежать этой ошибки, например, следующим образом:

if (connection != null){
    connection.Open();
}

Примечание. Чтобы избежать этой ошибки, вы всегда должны инициализировать свои объекты прежде чем пытаться что-либо сделать с ними.

202
задан BalusC 13 April 2011 в 12:53
поделиться

2 ответа

<ui:include>

Наиболее простой способ - <ui:include> . Включенный контент должен быть помещен внутри <ui:composition> .

Пример Kickoff главной страницы /page.xhtml:

<!DOCTYPE html>
<html lang="en"
    xmlns="http://www.w3.org/1999/xhtml"
    xmlns:f="http://xmlns.jcp.org/jsf/core"
    xmlns:h="http://xmlns.jcp.org/jsf/html"
    xmlns:ui="http://xmlns.jcp.org/jsf/facelets">
    <h:head>
        <title>Include demo</title>
    </h:head>
    <h:body>
        <h1>Master page</h1>
        <p>Master page blah blah lorem ipsum</p>
        <ui:include src="/WEB-INF/include.xhtml" />
    </h:body>
</html>

Страница включения /WEB-INF/include.xhtml (да, это файл целиком, любые теги вне <ui:composition> не нужны, поскольку в любом случае они игнорируются Facelets):

<ui:composition 
    xmlns="http://www.w3.org/1999/xhtml"
    xmlns:f="http://xmlns.jcp.org/jsf/core"
    xmlns:h="http://xmlns.jcp.org/jsf/html"
    xmlns:ui="http://xmlns.jcp.org/jsf/facelets">
    <h2>Include page</h2>
    <p>Include page blah blah lorem ipsum</p>
</ui:composition>

Это нужно открыть /page.xhtml. Обратите внимание, что вам не нужно повторять <html>, <h:head> и <h:body> внутри включенного файла, что в противном случае приводило бы к недопустимому HTML .

Вы можете используйте динамическое выражение EL в <ui:include src>. См. Также . Как обновить динамику ajax, включив контент в меню навигации? (JSF SPA) .


<ui:define> / <ui:insert>

Более сложным способом включения является templating . Это включает в себя в основном наоборот. Страница главного шаблона должна использовать <ui:insert> , чтобы объявить места для вставки определенного содержимого шаблона. Страница шаблона клиента, использующая страницу главного шаблона, должна использовать <ui:define> для определения содержимого шаблона, который должен быть вставлен.

Страница главного шаблона /WEB-INF/template.xhtml (как подсказка дизайна: заголовок, меню и нижний колонтитул могут, в свою очередь, быть <ui:include> файлами):

<!DOCTYPE html>
<html lang="en"
    xmlns="http://www.w3.org/1999/xhtml"
    xmlns:f="http://xmlns.jcp.org/jsf/core"
    xmlns:h="http://xmlns.jcp.org/jsf/html"
    xmlns:ui="http://xmlns.jcp.org/jsf/facelets">
    <h:head>
        <title><ui:insert name="title">Default title</ui:insert></title>
    </h:head>
    <h:body>
        <div id="header">Header</div>
        <div id="menu">Menu</div>
        <div id="content"><ui:insert name="content">Default content</ui:insert></div>
        <div id="footer">Footer</div>
    </h:body>
</html>

Страница клиента шаблона /page.xhtml (обратите внимание на атрибут template, также здесь это файл целиком):

<ui:composition template="/WEB-INF/template.xhtml"
    xmlns="http://www.w3.org/1999/xhtml"
    xmlns:f="http://xmlns.jcp.org/jsf/core"
    xmlns:h="http://xmlns.jcp.org/jsf/html"
    xmlns:ui="http://xmlns.jcp.org/jsf/facelets">

    <ui:define name="title">
        New page title here
    </ui:define>

    <ui:define name="content">
        <h1>New content here</h1>
        <p>Blah blah</p>
    </ui:define>
</ui:composition>

Это нужно открыть /page.xhtml. Если нет <ui:define>, тогда вместо него будет отображаться содержимое по умолчанию внутри <ui:insert>, если оно есть.


<ui:param>

Вы можете передать параметры на <ui:include> или <ui:composition template> на <ui:param> .

<ui:include ...>
    <ui:param name="foo" value="#{bean.foo}" />
</ui:include>
<ui:composition template="...">
    <ui:param name="foo" value="#{bean.foo}" />
    ...
</ui:composition >

Внутри файла include / template он будет доступен как #{foo}. Если вам нужно передать «много» параметров в <ui:include>, вам лучше рассмотреть регистрацию файла include как файла тега, чтобы вы могли в конечном итоге использовать его так <my:tagname foo="#{bean.foo}">. См. Также . Когда использовать & lt; ui: include & gt ;, файлы тегов, составные компоненты и / или настраиваемые компоненты?

Вы можете даже передать целые бобы, методы и параметры с помощью <ui:param>. См. Также JSF 2: как передать действие, включающее аргумент, вызываемый в под-просмотр Facelets (с использованием ui: include и ui: param)?


Design hints

Файлы, которые не должны быть общедоступными, просто вводя / угадывая его URL-адрес, должны быть помещены в папку /WEB-INF, например, как файл include и файл шаблона в приведенном выше примере. См. Также Какие файлы XHTML мне нужно вставить / WEB-INF, а какие нет?

За пределами <ui:composition> не должно быть никакой разметки (HTML-код) и <ui:define>. Вы можете поместить их, но они будут проигнорированы Facelets. Внесение разметки в нее полезно только для веб-дизайнеров. См. Также . Есть ли способ запустить страницу JSF без создания всего проекта?

В наши дни доктриком HTML5 является рекомендуемый тип доктрины, «несмотря на то, что это XHTML файл. Вы должны увидеть XHTML как язык, который позволяет вам создавать HTML-выход, используя инструмент на основе XML. См. Также Возможно ли использовать JSF + Facelets с поддержкой HTML 4/5? и JavaServer Faces 2.2 и HTML5, почему XHTML все еще используется .

Файлы CSS / JS / image могут быть включены в качестве динамически перемещаемых / локализованных / версий. См. Также Как ссылаться на ресурс CSS / JS / image в шаблоне Facelets?

Вы можете поместить файлы Facelets в многоразовый JAR-файл. См. Также Структура для нескольких проектов JSF с общим кодом .

Для примеров реального времени расширенного шаблона Facelets проверьте папку src/main/webapp в исходном коде Java EE Kickoff и исходный код сайта сайта OmniFaces .

387
ответ дан Community 28 August 2018 в 05:48
поделиться

Включенная страница:

<!-- opening and closing tags of included page -->
<ui:composition ...>
</ui:composition>

Включая страницу:

<!--the inclusion line in the including page with the content-->
<ui:include src="yourFile.xhtml"/>
  • Вы запускаете прилагаемый файл xhtml с помощью ui:composition, как показано выше.
  • Вы включаете этот файл с ui:include в включающий файл xhtml, как показано выше.
22
ответ дан Daniel Hernández 28 August 2018 в 05:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: