Использование той же страницы для создания и редактирования в JSF 1.2 (Facelets) - PullRequest
2 голосов
/ 15 марта 2011

Предположим, у меня есть страница XHTML, которая содержит форму для создания пользователя. Здесь есть все необходимые поля и кнопка «Сохранить». Теперь в другом месте моего приложения есть возможность редактировать информацию о пользователях. Я хотел бы повторно использовать ту же страницу для выполнения этой операции. Но как? Как передать информацию о пользователе на эту страницу и как изменить действие «Сохранить», чтобы перейти на нужную страницу? Я ищу чистое решение (лучшая практика?), А не грязное решение.

1 Ответ

1 голос
/ 17 марта 2011

Вы можете поместить поля ввода в файл тега Facelet.Основной базовый пример:

/tags/user.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:outputLabel for="name" value="Name" />
    <h:inputText id="name" value="#{user.name}" />
    <h:message for="name" />
    <br />
    <h:outputLabel for="email" value="Email" />
    <h:inputText id="email" value="#{user.email}" />
    <h:message for="email" />
    <br />
    <h:outputLabel for="city" value="City" />
    <h:inputText id="city" value="#{user.city}" />
    <h:message for="city" />
</ui:composition>

Определите его в /META-INF/user.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>user</tag-name>
        <source>tags/user.xhtml</source>
    </tag>
</facelet-taglib>

, который вы регистрируете в /WEB-INF/web.xml следующим образом

<context-param>
    <param-name>facelets.LIBRARIES</param-name>
    <param-value>/META-INF/user.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:my="http://example.com/jsf/facelets"
    xmlns:ui="http://java.sun.com/jsf/facelets"
>
    <h:form>
        <my:user user="#{register.user}" />
        <h:commandButton value="Create" action="#{register.create}" />
    </h:form>
</ui:composition>

и

<ui:composition 
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:my="http://example.com/jsf/facelets"
    xmlns:ui="http://java.sun.com/jsf/facelets"
>
    <h:form>
        <my:user user="#{editor.user}" />
        <h:commandButton value="Save" action="#{editor.save}" />
    </h:form>
</ui:composition>

Атрибут user="#{whatever}" <my:user> становится #{user} в файле тегов (т. Е. Он доступен по имени атрибута в качестве ключа).

...