0

我如何重用包含的 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 的当前实现显示“一”、“二”、“三”和“四”。我想在其他地方包含上面的 child.xhtml,它应该只显示“二”和“四”。

4

1 回答 1

2

首先,这不是一个有效的包含文件语法。您正在复制 XML 序言、HTML 文档类型<html><body>标签。这只会在 webbrowser 的最终输出中成为非法的 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>to参数化它<ui:include>

例如

<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时,它们将被显示。

于 2013-07-16T16:34:27.393 回答