Facelets:如何将 ui:insert 值作为 html 属性传递?

Posted

技术标签:

【中文标题】Facelets:如何将 ui:insert 值作为 html 属性传递?【英文标题】:Facelets: how to pass a ui:insert value as an html attribute? 【发布时间】:2010-10-06 19:28:15 【问题描述】:

我正在尝试在 Facelets/JSF 环境中完成一个小调整。我几乎不知道它们是如何组合在一起的。

我在各个页面上定义了一个值作为“标题”

<ui:define name="title">PageUID_123</ui:define>

在另一个页面上,我引用了这个:

<ui:insert name="title"/>

我可以很好地将 html 标签包裹在插入内容周围,但我需要能够将“title”的值作为另一个元素的属性输出。我的最终目标是让它像这样在 html 中呈现:

<meta name="pageid" content="PageUID_123"/>

如果我尝试将插入标签放在 content="" 位中,则会引发解析错误。有没有办法做到这一点?

【问题讨论】:

【参考方案1】:

我面前没有工作环境,但我相信你不想让你使用&lt;ui:define&gt;,而是你想使用&lt;ui:param&gt;然后使用$x#x (或忘记哪个或是否重要)将它们拉出来。

因此,以您为例,您将拥有:

<ui:param name="title" value="PageUID_123" />

然后:

<meta name="pageid" content="$title"/>

我唯一担心的是你使用 include 来拥有漂亮的模板,即

模板:

<html>
    <head>
        <meta name="pageid" content="$title"/>
    </head>
    <body>
        <ui:insert name="content" />
    </body>
</html>

内页:

<html xmlns="...so many">
    <ui:param name="title" value="PageUID_123" />
    <ui:define name="content">
        <!-- content goes here -->
    </ui:define>
</html>

我真的不知道那会不会飞……

编辑:您可能想尝试$title#title 只是为了踢一下您现在的做法,它可能会起作用。

【讨论】:

在 facelets 中使用 $x 或 #x 并不重要。他们的意思是一样的:facelets.dev.java.net/nonav/docs/dev/docbook.html#el

以上是关于Facelets:如何将 ui:insert 值作为 html 属性传递?的主要内容,如果未能解决你的问题,请参考以下文章

JSF 2:如何将包含要调用的参数的动作传递给 Facelets 子视图(使用 ui:include 和 ui:param)?

JSF/Facelets:为啥将 JSF/Facelets 与 HTML 标签混合不是一个好主意?

如何创建自定义 Facelets 标签?

如何在 Facelets 的 EL 布尔表达式中使用 &&?

如何在 Eclipse 中查看 jsf/facelets 元素的文档

如何迭代List 并渲染JSF Facelets中的每个项目