具有条件显示组件的Facelets模板重用

时间:2013-07-16 16:22:14

标签: templates jsf facelets reusability

我如何重用包含显示更多/更少数据的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”的地方。

1 个答案:

答案 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,则会显示它们。