如何在 JSF panelGrid 中设置 colspan 和 rowspan?

Posted

技术标签:

【中文标题】如何在 JSF panelGrid 中设置 colspan 和 rowspan?【英文标题】:How to set colspan and rowspan in JSF panelGrid? 【发布时间】:2011-03-07 20:48:41 【问题描述】:

如何在 JSF <h:panelGrid> 中设置 colspanrowspan

【问题讨论】:

【参考方案1】:

对于标准的 JSF 实现,两者都不可能。有 3 种方法可以解决此问题:

    自己编写纯 html<h:panelGrid> 基本上呈现 HTML <table>。做同样的事情。 创建一个支持此功能的自定义 HTML 渲染器。然而,这将是大量的汗水和痛苦。 使用支持此功能的第 3 方组件库。 Tomahawk 有一个 <t:panelGroup> 组件,它在 <h:panelGrid> 中支持 colspan。 RichFaces(仅限 3.x)有一个 <rich:column> 组件,它支持 <rich:dataTable> 中的 colspanrowspan。 PrimeFaces 在<p:column> 旁边有一个<p:row><p:panelGrid><p:dataTable> 都支持(<p:columnGroup> 也支持)。

【讨论】:

您是否尝试过使用 colspan 的 panelgrid 中的 rich:column?因为文档说:““colspan”、“rowspan”和“breakbefore”属性只影响 中的列,而不影响 中的列。”【参考方案2】:

自 2012 年 1 月 24 日起,Primefaces 还可以在 Primefaces 的 panelGrid 组件中使用 colspan 和 rowspan。见:

http://www.primefaces.org/showcase/ui/panel/panelGrid.xhtml

【讨论】:

【参考方案3】:

使用:rich:column colspan="2" of RichFaces

<rich:column colspan="2">                        
<h:outputText  value="Ingrese el texto de la imagen" /> 
</rich:column>  

【讨论】:

这个问题是关于 JSF 而不是richfaces【参考方案4】:

假设

    一个包含两个条目的消息资源文件:

    key.row=&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td key.gt=&gt;

    行.xhtml

    <ui:composition 
        xmlns="http://www.w3.org/1999/xhtml"
        xmlns:ui="http://java.sun.com/jsf/facelets"
        xmlns:h="http://java.sun.com/jsf/html"
        xmlns:f="http://java.sun.com/jsf/core"
        xmlns:c="http://java.sun.com/jsp/jstl/core" >
    
        <c:forEach begin="0" end="#colspan-2">
            <h:panelGroup />
        </c:forEach>
    
        <h:panelGroup>
          <h:outputText value="#i18n['key.row']" escape="false" />
          <h:outputText value=" colspan='#colspan' #cellAttributes" />
          <h:outputText value="#i18n['key.gt']" escape="false" />
    
          <ui:insert />
        </h:panelGroup>
    
    </ui:composition>
    

    那么,例如

    <h:panelGrid columns="3">
      <h:outputText value="r1-c1" />
      <h:outputText value="r1-c2" />
      <h:outputText value="r1-c3" />
    
      <ui:decorate template="/row.xhtml">
        <ui:param name="colspan" value="3" />
        <ui:param name="cellAttributes" value=" align='center'" />
    
        <div>Hello!!!!!</div>
      </ui:decorate>
    

打印一个包含 3 行的表格:

    r1-c1, r1-c2, r1-c3

    3 个空白单元格

    一个单元格对齐中心,具有 colspan 3 并包含一个 hello div。

【讨论】:

也不是我做事的方式。即使它可能会回答问题,也请尝试进行教育。不好的做法是……好……不好。 :)【参考方案5】:

我同意 BalusC 的回答并想补充一点,如果您使用其 p:dataTable 组件,Primefaces JSF2 组件库也提供此功能。那里称为分组。

【讨论】:

【参考方案6】:

没有办法在面板网格中定义列跨度,但如果使用得当,您可以仅通过普通标签来实现。我想给你举一个例子。

<h:panelGrid columns="1" >
<h:panelGrid columns="2">
    <h:commandButton image="resources/images/Regular5.jpg" action="booking/Create.jsf?faces-redirect=truebookingType=REGULAR">
    </h:commandButton>
    <h:commandButton id="button2" image="resources/images/Casual2.jpg" action="booking/Create.jsf?faces-redirect=truebookingType=CASUAL">
    </h:commandButton>
</h:panelGrid>
<h:panelGrid columns="2">
    <h:commandButton id="button3" image="resources/images/Instant2.jpg" action="booking/Create.jsf?faces-redirect=truebookingType=INSTANT">
    </h:commandButton>
    <h:commandButton id="button4" image="resources/images/Outstation6.jpg" action="booking/Create.jsf?faces-redirect=truebookingType=OUTSTATION">
    </h:commandButton> 
</h:panelGrid>
<h:commandButton id="button5" image="resources/images/ShareMyCar.jpg" action="booking/Create.jsf?faces-redirect=truebookingType=OUTSTATION">
</h:commandButton>

请注意,按钮 5 根据其所需的大小跨越两列。

【讨论】:

以上是关于如何在 JSF panelGrid 中设置 colspan 和 rowspan?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 JSF panelGrid 中添加一个空元素?

如何在jsf中的所有页面中设置菜单栏[重复]

在固定大小的表格中设置 JSF 列标题的宽度

在 JSF 中设置/获取会话属性

我应该使用dataTable还是panelGrid? JSF

JSF 2 selectOneRadio未在Bean中设置值[重复]