Включить подэлемент в компонент JSF 2.0 - PullRequest
9 голосов
/ 13 августа 2010

Это должно быть просто.Я пытаюсь передать подэлемент в компонент JSF.Мой компонент объявлен как:

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html
    xmlns="http://www.w3.org/1999/xhtml"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:composite="http://java.sun.com/jsf/composite">

<composite:interface>
</composite:interface>

<composite:implementation>
    <div style="border: 1px solid black;">
        <ui:insert />
    </div>
</composite:implementation>

</html>

Затем я использую это на странице следующим образом:

<box:box>
    <p>Hello world!</p>
</box:box>

К сожалению, окно отображается нормально (черная граница), но "Hello world!»текст не входит в него.Я также попробовал более подробный синтаксис, используя <ui:insert name="content"> и вызывая по <ui:define name="content">Hello World!</ui:define>, но это не сработало.

Где я могу ошибиться?

Ответы [ 2 ]

12 голосов
/ 13 августа 2010

Хорошо, я понял это.Вы должны использовать <composite:insertChildren /> вместо того, чтобы:

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html
    xmlns="http://www.w3.org/1999/xhtml"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:composite="http://java.sun.com/jsf/composite">

<composite:interface>
</composite:interface>

<composite:implementation>
    <div style="border: 1px solid black;">
        <composite:insertChildren />
    </div>
</composite:implementation>

</html>

Это работает.

0 голосов
/ 13 августа 2010

Вы должны отправить содержимое как параметр:

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

    <html
        xmlns="http://www.w3.org/1999/xhtml"
        xmlns:ui="http://java.sun.com/jsf/facelets"
        xmlns:composite="http://java.sun.com/jsf/composite">

    <composite:interface>
         <composite:attribute name="content"/>
    </composite:interface>

    <composite:implementation>
        <div style="border: 1px solid black;">
             <h:outputText value="#{cc.attrs.content}" escape="false"/>
        </div>
    </composite:implementation>

</html>

и в вашем коде:

<box:box content="<p>Hello world!</p>" />

Я добавил escape="false", так как вы используете теги HTML внутри ELexpression.

Подробнее о составных элементах читайте в Статья Дэвида Гири

...