Предположим, у меня есть страница XHTML, которая содержит форму для создания пользователя. Здесь есть все необходимые поля и кнопка «Сохранить». Теперь в другом месте моего приложения есть возможность редактировать информацию о пользователях. Я хотел бы повторно использовать ту же страницу для выполнения этой операции. Но как? Как передать информацию о пользователе на эту страницу и как изменить действие «Сохранить», чтобы перейти на нужную страницу? Я ищу чистое решение (лучшая практика?), А не грязное решение.
Вы можете поместить поля ввода в файл тега 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
/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 следующим образом
/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} в файле тегов (т. Е. Он доступен по имени атрибута в качестве ключа).
user="#{whatever}"
<my:user>
#{user}