Вопрос по jsf – JSF 1.2: могу ли я создать компонент многократного использования в представлении JSF

6

Можно ли что-то подобное в jsf?

<ui:composition>
  <x:reusableCode id="editScreen">InnerHtml ... </x:reusableCode>
  code...
  <x:use component="editScreen"/>
</ui:composition

Я знаю, что могу создать свой собственный компонент и зарегистрировать его в jsf tagLib, но мне нужно многократно использовать HTML только в файле представления jsf.

Вы используете JSF 2.0? Matt Handy
Извините, я забыл добавить это в резюме. Я использую 1.2 Daggeto

Ваш Ответ

1   ответ
4

Вот базовый пример. Создайте/WEB-INF/tags/some.xhtml:

<ui:composition 
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:ui="http://java.sun.com/jsf/facelets"
>
    <h:outputText value="#{foo}" />
</ui:composition>

Определите это в/WEB-INF/my.taglib.xml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE facelet-taglib PUBLIC
    "-//Sun Microsystems, Inc.//DTD Facelet Taglib 1.0//EN"
    "http://java.sun.com/dtd/facelet-taglib_1_0.dtd">

<facelet-taglib>
    <namespace>http://example.com/jsf/facelets</namespace>
    <tag>
        <tag-name>some</tag-name>
        <source>/WEB-INF/tags/some.xhtml</source>
    </tag>
</facelet-taglib>

Зарегистрируй это в/WEB-INF/web.xml:

<context-param>
    <param-name>facelets.LIBRARIES</param-name>
    <param-value>/WEB-INF/my.taglib.xml</param-value>
</context-param>

(обратите внимание, если у вас есть несколько, используйте точку с запятой; отделить их)

Наконец, просто объявите это в шаблонах главной страницы.

<ui:composition 
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:my="http://example.com/jsf/facelets"
>
    <my:some foo="value1" />
    <my:some foo="value2" />
    <my:some foo="value3" />
</ui:composition>

Более сложный пример можно найти здесь: Как сделать сетку из составного компонента JSF? Примечание: нацелена на JSF 2.0, но с небольшими изменениями, основанными на приведенном выше примере, она работает хорошо на Facelets 1.x.

Спасибо за этот подход, но я подумал, что есть метод для создания повторно используемого компонента в одном файле JSF, без какой-либо регистрации тегов. :) Daggeto
Это работает, кроме<source>/WEB-INF/tags/some.xhtml</source> элемент вmy.taglib.xml. Я должен был изменить его на<source>tags/some.xhtml</source> чтобы это сработало. acdcjunior

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