使用相同的页面在JSF 1.2(Facelets)中创建和编辑

时间:2011-03-15 13:24:40

标签: jsf facelets

假设我有一个包含用于创建用户的表单的XHTML页面。有所有必要的字段和“保存”按钮。现在在我的应用程序的其他位置有一个编辑用户信息的选项。我想重复使用相同的页面来执行此操作。但是怎么样?如何将用户信息传递到该页面?如何更改“保存”操作以导航到我想要的页面?我正在寻找一个干净的解决方案(最佳实践?),而不是任何肮脏的解决方案。

1 个答案:

答案 0 :(得分:1)

您可以将输入字段放在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}"的{​​{1}}属性成为标记文件中的<my:user>(即属性名称可用作关键字)。