2011-03-15 2 views
2

사용자 생성을위한 양식이 포함 된 XHTML 페이지가 있다고 가정 해 보겠습니다. 필요한 모든 필드와 "저장"버튼이 있습니다. 이제 내 앱의 다른 곳에서 사용자 정보를 편집 할 수있는 옵션이 있습니다. 이 작업을 수행하는 데 동일한 페이지를 다시 사용하고 싶습니다. 그러나 어떻게? 해당 페이지에 사용자 정보를 전달하려면 어떻게해야하며 "저장"작업을 변경하여 원하는 페이지로 이동하려면 어떻게해야합니까? 깨끗한 솔루션 (모범 사례?)을 찾고 있는데 더러운 솔루션이 아닙니다.JSF 1.2 (Facelets)에서 작성하고 편집 할 때 동일한 페이지 사용

답변

0

입력란을 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> 

<context-param> 
    <param-name>facelets.LIBRARIES</param-name> 
    <param-value>/META-INF/user.taglib.xml</param-value> 
</context-param> 

(메모를 다음과 같이 여러있을 때, /WEB-INF/web.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> 

에서 정의 세미콜론 사용 ;으로 구분)

마지막으로 메인 페이지 템플릿에서 선언하십시오.

<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> 

<my:user>user="#{whatever}" 속성 태그 파일의 #{user} (즉이 키와 속성 명으로 사용할 수)가된다.

+0

물론 답변을 주셔서 감사합니다. 이전에 이미 사용자 정의 구성 요소를 사용해 왔지만 아직 한 가지 문제가 있습니다. 두 페이지를 작성해야합니다. 하나는 편집 용이고 다른 하나는 사용자 작성입니다. 한 페이지 만 쓸 수있는 깨끗한 솔루션을 찾고 있습니다. BTW : Facelet 구성 요소에 대한 인터페이스를 지정하는 방법이 있습니까? – Arek

관련 문제