我如何重用包含显示更多/更少数据的jsf模板
例如,我有main.xhtml,其中包含child.xhtml
child.xhtml如下
<?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 xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:f="http://java.sun.com/jsf/core" xmlns:h="http://java.sun.com/jsf/html" xmlns:rich="http://richfaces.org/rich"
xmlns:a4j="http://richfaces.org/a4j" xmlns:c="http://java.sun.com/jstl/core" xmlns:s="http://jboss.com/products/seam/taglib">
<body>
<h:outputText value="One"></h:outputText>
<h:outputText value="Two"></h:outputText>
<h:outputText value="Three"></h:outputText>
<h:outputText value="Four"></h:outputText>
</body>
</html>
child.xhtml的当前实现显示“One”,“Two”,“Three”和“Four”。我想将上面的child.xhtml包含在其他应该只显示“Two”和“Four”的地方。
答案 0 :(得分:2)
首先,这不是有效的包含文件语法。您正在复制XML序言,HTML文档类型,<html>
和<body>
标记。这只会在webbrowser的最终输出中以illegal HTML语法结束。
相应修复:
<ui:composition
xmlns="http://www.w3.org/1999/xhtml"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:ui="http://java.sun.com/jsf/facelets"
>
<h:outputText value="One" />
<h:outputText value="Two" />
<h:outputText value="Three" />
<h:outputText value="Four" />
</ui:composition>
回到你的具体问题,为了有条件地渲染组件,只需使用rendered
属性。您可以通过将<ui:param>
传递给<ui:include>
来对其进行参数化。
E.g。
<ui:composition
xmlns="http://www.w3.org/1999/xhtml"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:ui="http://java.sun.com/jsf/facelets"
>
<h:outputText value="One" rendered="#{empty hide or not hide}" />
<h:outputText value="Two" />
<h:outputText value="Three" rendered="#{empty hide or not hide}" />
<h:outputText value="Four" />
</ui:composition>
可以用作
<ui:include src="/WEB-INF/includes/client.xhtml">
<ui:param name="hide" value="#{true}" />
</ui:include>
如果省略<ui:param name="hide">
或其值不是true
,则会显示它们。