JSF:如何在自定义facelets标记中插入内容?

时间:2016-10-06 09:29:57

标签: jsf

我已经创建了一个自定义的facelets标记文件,但我正在努力插入一些内容。这是标签:

<ui:composition xmlns="http://www.w3.org/1999/xhtml"
                xmlns:f="http://java.sun.com/jsf/core"
                xmlns:h="http://java.sun.com/jsf/html"
                xmlns:ui="http://java.sun.com/jsf/facelets">
  <h1>TestTag</h1>
  <ui:insert name="foo"/>
</ui:composition>

这就是我期望使用它的方式:

<ds:testtag>
  <ui:define name="foo">
    <h2>TestInsert</h2>
  </ui:define>
</ds:testtag>

当然,我已经创建了一个taglib文件并在web.xml中注册了它。 ds:名称空间也在我想要使用标记的文件中声明。

在渲染结果上,我可以看到标签本身的 TestTag 标题,但不会看到插入的 TestInsert

此问题的回答How to create a custom Facelets tag?以及此处的评论How to create a composite component for a datatable column?表明可以在标记中插入内容;不幸的是,我找不到一个有效的例子。我错过了什么?

2 个答案:

答案 0 :(得分:1)

试试这个(未经测试):

<ui:composition xmlns="http://www.w3.org/1999/xhtml"
                xmlns:f="http://java.sun.com/jsf/core"
                xmlns:h="http://java.sun.com/jsf/html"
                xmlns:ui="http://java.sun.com/jsf/facelets">
  <h1>TestTag</h1>
  <ui:insert />
</ui:composition>

并使用这样的组件:

<ds:testtag>
    <h2>TestInsert</h2>
</ds:testtag>

答案 1 :(得分:-3)

您需要在组件中插入标签:

<ui:composition xmlns="http://www.w3.org/1999/xhtml"
                xmlns:f="http://java.sun.com/jsf/core"
                xmlns:h="http://java.sun.com/jsf/html"
                xmlns:ui="http://java.sun.com/jsf/facelets">
  <h1>TestTag</h1>
  <ui:insertChildren/>
</ui:composition>

当它像这样使用时:

<ds:testtag>
    <h2>TestInsert</h2>
</ds:testtag>

您也可以使用

<composite:insertChildren/>

不要忘记正确的进口

xmlns:composite="http://java.sun.com/jsf/composite"

xmlns:ui="http://java.sun.com/jsf/composite"