【问题标题】:Right aligning cell content in a datatable column右对齐数据表列中的单元格内容
【发布时间】:2011-07-03 23:39:38
【问题描述】:

我想右对齐 outputText 值(即下面的 fee.TableAmount),并且我想保持该列的标题居中。我必须将什么参数传递给下面的 outputText 才能实现这一点?

<h:dataTable>
    ...
    (other columns)
    ...
    <h:column headerClass="columnCenter">
        <f:facet id="header_agency" name="header">
            <h:outputText value="Amount"/>
        </f:facet>
        <h:outputText value="#{fee.tableAmount}">
            <f:convertNumber maxFractionDigits="2" groupingUsed="true"
                currencySymbol="$" type="currency" />
        </h:outputText>
    </h:column>
</h:dataTable>

【问题讨论】:

    标签: css jsf datatable


    【解决方案1】:

    您可以使用&lt;h:dataTable&gt;columnClasses 属性在同一列的所有单元格上指定CSS 类。您可以传递以逗号分隔的类名字符串。

    <h:dataTable columnClasses="column1,column2,column3">
    

    上面的第一列呈现&lt;td class="column1"&gt;,第二列呈现&lt;td class="column2"&gt;,依此类推。这使您可以外部化和规范化样式。

    假设你有 4 列,第一列、第二列和第四列不需要有特殊的样式,只有第三列需要右对齐,然后这样做

    <h:dataTable columnClasses="none,none,right,none">
    

    结合

    td.right {
        text-align: right;
    }
    

    这在语义上比float: right; 更正确,技术上更健壮。

    【讨论】:

    • 是的,但奇怪的是&lt;thead&gt;&lt;th&gt;...&lt;/th&gt;&lt;/thead&gt; 表头似乎只能指定类in &lt;h:column headerClass="..."&gt; instead。所以:列 data 的 CSS 类来自 &lt;h:dataTable columnClasses="..., ..., ..."/&gt;,如上所述,列 headers 的 CSS 来自每个 &lt;h:column headerClass="..."&gt;
    • @Arjan:&lt;h:dataTable&gt; 也有一个headerClass 属性。另请参阅前面链接的标签文档的“渲染标题”部分。
    • 是的,但这适用于所有列标题,并且不是特定列的特定类的逗号分隔列表,is it?
    • 啊,是的,我现在明白你的意思了。是的,必须在&lt;h:column&gt;headerClass 属性中指定各个列标题。如果有&lt;h:dataTable headerClasses&gt; 和/或&lt;h:column styleClass&gt;,这将是有意义的。好吧,考虑向 JSF 规范人员发布增强请求。
    【解决方案2】:

    如你所说,如果你直接在你的&lt;h:outputText&gt; 上定义一个float: right,像这样:

    <h:outputText style="float: right;" value="#{fee.tableAmount}"/>
    

    然后它将您的文本嵌套在 &lt;span&gt; 中,然后将其向右移动。

    不幸的是,&lt;h:column&gt; 组件没有提供指定列本身的 CSS 类的方法。但是,如果您为表格使用其他组件,例如 Richfaces &lt;rich:column&gt;,还有另一种解决方案是指定此:首先,设置一个 CSS 类:

    .textOnRight {
        text-align: right;
    }
    

    然后,将此 CSS 类分配给您的列:

    <rich:column styleClass="textOnRight" headerClass="columnCenter">
        <f:facet name="header">
            <h:outputText value="Amount"/>
        </f:facet>
        <h:outputText value="#{fee.tableAmount}">
            <f:convertNumber maxFractionDigits="2" groupingUsed="true"
                currencySymbol="$" type="currency" />
        </h:outputText>
    </rich:column>
    

    顺便说一句,在你的&lt;f:facet&gt; 中设置一个id 没有任何作用,因为这个属性不是由这个组件处理的。

    【讨论】:

      【解决方案3】:

      我刚刚为其他想知道的人添加了 style="float:right"。

      <h:outputText style="float:right" value="#{fee.tableAmount}">
         ...
      </h:outputText>
      

      【讨论】:

        猜你喜欢
        • 2021-10-06
        • 1970-01-01
        • 2011-11-12
        • 1970-01-01
        • 2020-08-28
        • 2023-03-16
        • 1970-01-01
        • 2018-06-16
        • 1970-01-01
        相关资源
        最近更新 更多