没有自己的HTML元素的JSF组件

时间:2012-07-10 12:17:25

标签: java jsf-2

我正在寻找一个JSF 2.0组件,它只是其他组件的容器,但不生成自己的HTML元素。

我的情况是我有一个(已经设置过的)jsf-xhtml组件页面。现在我需要禁用很多渲染。

<ui:component>
    <h:panelGroup layout="block" rendered="#{not empty user.registrations}">...</>
    <h:panelGroup layout="block" rendered="#{not empty user.registrations}">...</>
    <h:panelGroup layout="block" rendered="#{not empty user.registrations}">...</>
    <h:panelGroup layout="block" rendered="#{not empty user.registrations}">...</>
</ui:component>

但我不想指定前rendered="#{not empty user.registrations}"次。相反,我想用一些组件包装它:

<ui:component>
    <xxxx  rendered="#{not empty user.registrations}">
        <h:panelGroup layout="block">...</>
        <h:panelGroup layout="block">...</>
        <h:panelGroup layout="block">...</>
        <h:panelGroup layout="block">...</>
    </xxxx>
</ui:component>

因为页面已经设置了风格(我担心这是以一种脆弱的方式完成的)我需要一个不生成自己的html元素的jsf-component(xxxx),如div左右。 这样的jsf组件会退出吗?

3 个答案:

答案 0 :(得分:3)

如果您使用的是primefaces,那么您有一个简单的解决方案:

使用p:outputPanel

如果没有,那么您也可以使用h:panelGroup。这没有任何格式。

答案 1 :(得分:1)

您可以使用

<ui:fragment rendered="#{not empty user.registrations}">

http://javaserverfaces.java.net/nonav/docs/2.1/vdldocs/facelets/ui/fragment.html

答案 2 :(得分:0)

试试这个:

<c:if test="#{not empty user.registrations}">
    <h:panelGroup layout="block">...</>
    <h:panelGroup layout="block">...</>
    <h:panelGroup layout="block">...</>
    <h:panelGroup layout="block">...</>
</c:if>

或者您可以将4 <h:panelGroup>与另一个<h:panelGroup>包裹起来:

<h:panelGroup rendered="#{not empty user.registrations}">
    <h:panelGroup layout="block">...</>
    <h:panelGroup layout="block">...</>
    <h:panelGroup layout="block">...</>
    <h:panelGroup layout="block">...</>
</h:panelGroup>