右对齐数据表列中的单元格内容

Posted

技术标签:

【中文标题】右对齐数据表列中的单元格内容【英文标题】: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>

【问题讨论】:

【参考方案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>

【讨论】:

以上是关于右对齐数据表列中的单元格内容的主要内容,如果未能解决你的问题,请参考以下文章

在excel中的大量数据中,如何查找出相同的四个单元格内容,并引用后面的单元格内容

Excel单元格内容太多会覆盖遮住下一单元格范围

DataGrip 在单元格内换行

excel中怎样使表格数据显示为水平居中和垂直居中?

excel怎么让单元格的文字居中?

循环遍历 DataTables 表以获取所有单元格内容