- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在 XHTML 页面中包含另一个 XHTML 页面的最正确方法是什么?我一直在尝试不同的方法,但没有一个有效。
最佳答案
<ui:include>
最基本的方法是 <ui:include>
。包含的内容必须放在 <ui:composition>
内.
母版页的启动示例 /page.xhtml
:
<!DOCTYPE html>
<html lang="en"
xmlns="http://www.w3.org/1999/xhtml"
xmlns:f="http://xmlns.jcp.org/jsf/core"
xmlns:h="http://xmlns.jcp.org/jsf/html"
xmlns:ui="http://xmlns.jcp.org/jsf/facelets">
<h:head>
<title>Include demo</title>
</h:head>
<h:body>
<h1>Master page</h1>
<p>Master page blah blah lorem ipsum</p>
<ui:include src="/WEB-INF/include.xhtml" />
</h:body>
</html>
包含页面/WEB-INF/include.xhtml
(是的,这是整个文件,<ui:composition>
之外的任何标签都是不必要的,因为 Facelets 无论如何都会忽略它们):
<ui:composition
xmlns="http://www.w3.org/1999/xhtml"
xmlns:f="http://xmlns.jcp.org/jsf/core"
xmlns:h="http://xmlns.jcp.org/jsf/html"
xmlns:ui="http://xmlns.jcp.org/jsf/facelets">
<h2>Include page</h2>
<p>Include page blah blah lorem ipsum</p>
</ui:composition>
这需要由 /page.xhtml
打开。请注意,您不需要重复 <html>
, <h:head>
和<h:body>
包含文件内,否则会导致 invalid HTML .
您可以在 <ui:include src>
中使用动态 EL 表达式。另请参阅How to ajax-refresh dynamic include content by navigation menu? (JSF SPA) .
<ui:define>
/<ui:insert>
更高级的包含方式是模板化。这基本上包括相反的情况。主模板页面应使用 <ui:insert>
声明插入已定义模板内容的位置。使用主模板页面的模板客户端页面应使用 <ui:define>
定义要插入的模板内容。
主模板页面/WEB-INF/template.xhtml
(作为设计提示:页眉、菜单和页脚甚至可以是 <ui:include>
文件):
<!DOCTYPE html>
<html lang="en"
xmlns="http://www.w3.org/1999/xhtml"
xmlns:f="http://xmlns.jcp.org/jsf/core"
xmlns:h="http://xmlns.jcp.org/jsf/html"
xmlns:ui="http://xmlns.jcp.org/jsf/facelets">
<h:head>
<title><ui:insert name="title">Default title</ui:insert></title>
</h:head>
<h:body>
<div id="header">Header</div>
<div id="menu">Menu</div>
<div id="content"><ui:insert name="content">Default content</ui:insert></div>
<div id="footer">Footer</div>
</h:body>
</html>
模板客户端页面 /page.xhtml
(注意 template
属性;同样在这里,这是整个文件):
<ui:composition template="/WEB-INF/template.xhtml"
xmlns="http://www.w3.org/1999/xhtml"
xmlns:f="http://xmlns.jcp.org/jsf/core"
xmlns:h="http://xmlns.jcp.org/jsf/html"
xmlns:ui="http://xmlns.jcp.org/jsf/facelets">
<ui:define name="title">
New page title here
</ui:define>
<ui:define name="content">
<h1>New content here</h1>
<p>Blah blah</p>
</ui:define>
</ui:composition>
这需要由 /page.xhtml
打开。如果没有<ui:define>
,那么<ui:insert>
里面的默认内容如果有的话,将改为显示。
<ui:param>
您可以将参数传递给<ui:include>
或<ui:composition template>
通过 <ui:param>
.
<ui:include ...>
<ui:param name="foo" value="#{bean.foo}" />
</ui:include>
<ui:composition template="...">
<ui:param name="foo" value="#{bean.foo}" />
...
</ui:composition >
在包含/模板文件中,它将作为 #{foo}
提供。 。如果您需要将“许多”参数传递给 <ui:include>
,那么你最好考虑将包含文件注册为标记文件,这样你最终就可以像这样使用它 <my:tagname foo="#{bean.foo}">
。另请参阅When to use <ui:include>, tag files, composite components and/or custom components?
您甚至可以通过<ui:param>
传递整个bean、方法和参数。另请参阅JSF 2: how to pass an action including an argument to be invoked to a Facelets sub view (using ui:include and ui:param)?
不应该通过输入/猜测其 URL 来公开访问的文件需要放置在 /WEB-INF
中文件夹,如上面示例中的包含文件和模板文件。另请参阅Which XHTML files do I need to put in /WEB-INF and which not?
<ui:composition>
之外不需要有任何标记(HTML 代码)和<ui:define>
。您可以放置任何内容,但它们将被 Facelets忽略。将标记放在那里只对网页设计师有用。另请参阅Is there a way to run a JSF page without building the whole project?
HTML5 文档类型是目前推荐的文档类型,“尽管”它是一个 XHTML 文件。您应该将 XHTML 视为一种允许您使用基于 XML 的工具生成 HTML 输出的语言。另请参阅Is it possible to use JSF+Facelets with HTML 4/5?和 JavaServer Faces 2.2 and HTML5 support, why is XHTML still being used .
CSS/JS/图像文件可以作为动态可重定位/本地化/版本化资源包含在内。另请参阅How to reference CSS / JS / image resource in Facelets template?
您可以将 Facelets 文件放入可重用的 JAR 文件中。另请参阅Structure for multiple JSF projects with shared code .
有关高级 Facelets 模板的真实示例,请查看 src/main/webapp
Java EE Kickoff App source code的文件夹和 OmniFaces showcase site source code .
关于jsf - 如何使用 JSF 2.0 Facelets 在 XHTML 中包含另一个 XHTML?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4792862/
我有多个模板,它们之间的区别仅在于几个容器。最复杂的一个包含所有其他容器中使用的所有容器的超集,因此为了避免创建多个模板,我按以下格式创建了最复杂的一个 some layout stuff (di
有没有办法将 html 文件的内容插入到 Facelet 模板中? Facelets 标记将不起作用,因为它仅用于包含 Facelet 内容。 换句话说,我正在寻找等同于 JSP include 指令
我有一个用 JSP 编码的应用程序,现在我们正在将页面迁移到 Facelets。 我们的 PhaseListeners 之一正在操作组件树,因为它需要找出树中的一些组件并提取其中的一些值。但是对于 F
我已经读了好几遍了:一些开发人员不提倡在他们的 XHTML 文件中将 JSF/Facelets 标签与 HTML 标签交织在一起。显然 HTML 标签不会成为 UI 组件树的一部分,但这样做的缺点是什
我正在使用 JSF 2.0 构建一个 Web 应用程序,并且在我的 WEB-INF > lib 文件夹中有一个 jaf-facelets.1.1.10 jar,所以现在我正在尝试删除它,以便我可以使用
我正在使用 Apache MyFaces Commons Validator标签库。 我应该如何将它添加到我的 web.xml 中?通过Maven下载和解析commons JAR。 XHTML(我认为
我正在尝试使用 Facelets 创建自定义标签,但它没有呈现(即标签在响应中显示为未替换)。 标签(/WEB-INF/facelets/tags/inputThumbnailSelector.xht
当我的页面无法正确呈现时,我会在 jboss 控制台中看到此信息。有谁知道这是什么意思? 14:22:46,403 INFO [facelet] Facelet[/layout/header.xht
有人知道如何获取 ui:repeat Facelets 标记中元素的索引吗? 最佳答案 指定“varStatus”属性的值: 然后您可以通过 EL 访问循环索引: #{myVarSta
我在使用 Facelets 中的自定义组件时遇到问题。第一次呈现页面时,会在组件类上正确设置属性。但是,当提交表单时,不会设置属性。 这是我用来测试这个的类。 public class TestEch
我在 Tomcat 中使用 JSF 2 和 RichFaces。我是初学者,正在试用我找到的页面 here ,但页面只是空白(未呈现内容)。我尝试添加 Facelets 1.1 库,页面呈现没有问题。
我在我的应用程序中大量使用 bundle 的属性,因为我努力在未来保持代码的可维护性。因此,所有 HTML 文本都是从键/值属性文件中获取的,例如。 'index_en.properties' 当我需
我正在尝试将 Facelets 与 MyFaces 1.2 一起使用。看起来 Facelets 下载地址为 http://facelets.dev.java.net不复存在。 有谁知道 1) 我在哪里
在 Eclipse (Helios) 中打开 JSF 页面(JSF + Apache Trinidad + facelet)时,Eclipse 在页面打开前会卡住几秒钟。 同样在编辑页面时,代码完成/
有没有办法在构建或部署过程中检查您的 Facelets 文件是否有错误? 我不是在寻找一种解决方案,它不仅可以根据架构验证 Facelets 文件,还可以验证 EL 表达式是否有效。例如,如果属性或方
我有一个包含 8 列的 JSF 数据表。最后 4 列是数值列。可以说我的数据表带来了 20 行结果。我想添加最后一行,它只包含最后 4 列的字段并包含 20 行对应值的总和。我想用 Facelets
我想在另一个模板中使用 Facelets 模板。目前我有一个“基本”模板,到目前为止已经足够我完成的所有页面。它有一个顶部和一个内容区域。 顶部具有 Logo 、菜单、登录/注销功能,而内容区域则显示
我有一个使用组合的应用程序(用于页面模板)。但是我们认为在创建一个 web 应用程序( war )来托管所有应用程序共享的所有应用程序的所有模板。 如何包含来自其他上下文的模板?此时我使用从 http
我有一个对象列表,其中我不知道有多少,也不知道将调用哪些属性。我可以创建一个数据表来在不同的列中显示所有对象的属性吗? 我在想类似的事情: "#{object.attribu
使用 Facelets 时,我在导航方面遇到了一些问题。 我在 /WEB-INF 中有我的主模板: Header
我是一名优秀的程序员,十分优秀!