JSF 1.2:我可以在JSF视图中创建可重用的组件

Dag*_*eto 6 jsf code-reuse components

在jsf中有可能是这样的吗?

<ui:composition>
  <x:reusableCode id="editScreen">InnerHtml ... </x:reusableCode>
  code...
  <x:use component="editScreen"/>
</ui:composition
Run Code Online (Sandbox Code Playgroud)

我知道我可以创建自己的组件并在jsf tagLib中注册它,但我只需要在jsf视图文件中重用HTML.

Bal*_*usC 4

在 Facelets 1.x 中,您可以为此目的创建一个标记文件。

这是一个基本的启动示例。创造/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>
Run Code Online (Sandbox Code Playgroud)

将其定义为/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>
Run Code Online (Sandbox Code Playgroud)

将其注册在/WEB-INF/web.xml

<context-param>
    <param-name>facelets.LIBRARIES</param-name>
    <param-value>/WEB-INF/my.taglib.xml</param-value>
</context-param>
Run Code Online (Sandbox Code Playgroud)

(注意,当有多个时,请使用分号;分隔)

最后只需在主页模板中声明它即可。

<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>
Run Code Online (Sandbox Code Playgroud)

可以在这里找到更高级的示例:如何制作 JSF 复合组件的网格?注意:以 JSF 2.0 为目标,但根据上面的示例进行了一些细微的更改,它在 Facelets 1.x 上也能正常工作。