gpt4 book ai didi

jsf - 如何将常用内容包含到多级模板页面中

转载 作者:行者123 更新时间:2023-12-04 18:24:31 25 4
gpt4 key购买 nike

我正在尝试将通用页面包含到模板中,但我得到的只是一个没有错误的空白页面。

common.xhtml其实有template.xhtml中指明的内容。似乎 template.xhtml 无法识别二级包含。

模板.xhtml

<html xmlns="http://www.w3.org/1999/xhtml" 
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:s="http://jboss.com/products/seam/taglib"
xmlns:c="http://java.sun.com/jstl/core"
xmlns:ub="http://jboss.com/products/seam/ub-taglib"
xmlns:rich="http://richfaces.ajax4jsf.org/rich">

<head>
<ui:insert name="css" />
<ui:insert name="header" />
</head>

<body>
<ui:insert name="body" />
</body>
</html>

自定义.xhtml

<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:s="http://jboss.com/products/seam/taglib"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:rich="http://richfaces.ajax4jsf.org/rich"
xmlns:a4j="https://ajax4jsf.dev.java.net/ajax"
xmlns:c="http://java.sun.com/jstl/core"
template="template.xhtml">

<ui:define name="css">
<link rel="stylesheet" type="text/css" href="/custom.css/>
</ui:define>

<ui:include src="common.xhtml" />

</ui:composition>

common.xhtml

<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:s="http://jboss.com/products/seam/taglib"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:rich="http://richfaces.ajax4jsf.org/rich"
xmlns:a4j="https://ajax4jsf.dev.java.net/ajax"
xmlns:c="http://java.sun.com/jstl/core"
template="template.xhtml">


<ui:define name="header">
<h1>header</h1>
</ui:define>
<ui:define name="body">
<table><tr><td>Table</td></tr></table>
</ui:define>
</ui:composition>

最佳答案

这确实行不通。 <ui:define>应该在模板客户端中使用(即带有 <ui:composition template="..."> 的页面),而不是在包含文件中使用(即带有 <ui:composition> 而没有 template 的页面)。但是,您可以仅从现有主模板“扩展”。

custom.xhtml 中删除:

<ui:include src="common.xhtml" />

common.xhtml 的变化

template="custom.xhtml"

然后打开 common.xhtml而不是 custom.xhtml在浏览器中。

另见:


具体问题无关,以防止最终用户表单能够打开 custom.xhtmltemplate.xhtml直接在浏览器中,建议将它们移动到 /WEB-INF 中文件夹。此外,您是否知道 <h:head><h:outputStylesheet>组件?我建议使用它们。另外,有一个 <h1>最终以<head>结束没有意义。也许你的意思是 <ui:insert name="header">在里面<body> ?此外,您可以轻松地将 <h1>在模板中,这样您就不需要在每个模板客户端中重复它们。

/WEB-INF/templates/template.xhtml

<html ...>
<h:head>
</h:head>
<h:body>
<ui:insert name="header" />
<ui:insert name="body" />
</body>
</html>

/WEB-INF/templates/custom.xhtml (CSS文件放在/resources文件夹中)

<ui:composition ... template="/WEB-INF/templates/template.xhtml">
<ui:define name="header">
<h1><ui:insert name="custom-header" /></h1>
</ui:define>
<ui:define name="body">
<h:outputStylesheet name="custom.css" target="head" />
<ui:insert name="custom-body" />
</ui:define>
</ui:composition>

/page.xhtml

<ui:composition ... template="/WEB-INF/templates/custom.xhtml">
<ui:define name="custom-header">
header
</ui:define>
<ui:define name="custom-body">
<table><tr><td>Table</td></tr></table>
</ui:define>
</ui:composition>

另见:

关于jsf - 如何将常用内容包含到多级模板页面中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16156817/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com