我是一个很长时间的JSP用户,但是facelets新手,我坚持认为这将是一个非常简单的任务。
如何在div标签中包装可选模板内容?
例如,给出以下简化模板:
<?xml version='1.0' encoding='UTF-8' ?>
<html xml:lang="en" lang="en"
xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html">
<h:head>
<!-- head stuff here -->
</h:head>
<h:body>
<!-- main body stuff here -->
<div class="border-box">
<ui:insert name="optional" />
</div>
</h:body>
</html>
如果我在没有定义可选内容的情况下使用此模板,我将收到一个不需要的空框。
我已经找到了一个解决方案,发现同样的问题提出了几次,但没有真正的答案。
任何人都可以帮助我吗?在我看来,想要使用模板系统是一件非常合理的事情,但这让我很难过。
答案 0 :(得分:2)
谢谢mael,ui:片段似乎是内容适合ui:param值属性的方式,但我会提出你的第一个建议。我将使用ui:decorate模板化包装器。
页面模板:
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xml:lang="en" lang="en"
xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html">
<h:head>
<!-- head stuff here -->
</h:head>
<h:body>
<!-- main body stuff here -->
<ui:insert name="optional" />
</h:body>
</html>
包装模板:
<?xml version='1.0' encoding='UTF-8' ?>
<ui:composition
xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets">
<div class="border-box">
<ui:insert />
</div>
</ui:composition>
调用:
<?xml version='1.0' encoding='UTF-8' ?>
<ui:composition
xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
template="page.xhtml">
<!-- other ui:defines -->
<ui:define name="optional">
<ui:decorate template="wrapper.xhtml">
<!-- optional content -->
</ui:decorate>
</ui:define>
</ui:composition>
答案 1 :(得分:0)
只需删除div
并在使用您模板的页面中进行类似的操作:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets">
<h:head />
<body>
<ui:composition template="template.xhtml">
<ui:define name="optional">
<div class="border-box">
<!-- Content here -->
</div>
</ui:define>
</ui:composition>
</body>
</html>