我是 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>
如果我使用此模板而不定义可选内容,我将得到一个不需要的空框。
我搜索了解决方案,发现同样的问题出现了几次,但没有真正的答案。
谁能帮帮我吗?在我看来,使用模板系统来做这件事是相当合理的,但它让我难住了。
最佳答案
谢谢 mael,当内容适合 ui:param 值属性时, ui:fragment 似乎是可行的方法,但我同意你的第一个建议。我将使用 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>
关于templates - 如何将可选的 Facelet 模板内容包装在 div 标签中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12692748/