如何使用字母作为p:dataTable的行索引

时间:2013-05-02 08:01:55

标签: jsf primefaces

您好我使用Primefaces数据表来显示一些数据,并且我在下面的代码中显示了以下机制来显示行索引的数字。(它的工作正常)。 我的问题是:

  

有什么办法,我可以将英文字母显示为行索引,如   下面?我不想把字母表放在bean和fetch的数组中   他们在每一行渲染。!

<p:dataTable id="resultTable" var="car" value="#{myBean.carList}" rowIndexVar="rowNum">

<p:column headerText="No.">
#{rowNum+1}
</p:column>

<p:column headerText="Name" >
#{car.name}
</p:column>

</p:dataTable>

修改 谢谢你的所有答案。我发现BalusC(不幸的是他删除了答案)和JavaKid的答案很容易然后放Javascript。 但是这些答案中存在一些问题所以我改变了,这就是答案。 如果您在HTML中添加&amp; ## {65+(rowNum + 1)}; ,则会抛出错误,说 十进制表示必须紧跟&#34;&amp;# &#34; 所以我改变了一点,现在它的工作。

ANSWER

<h:outputText value="&amp;&#35;#{64+(rowNum+1)};" escape="false"/>

感谢每一个人的答案。

3 个答案:

答案 0 :(得分:2)

您可以在javascript中使用数组来映射索引和aphabets:

                <script type="text/javascript">                
                    var alphabets = new Array();
                    alphabets[0] = "A";
                    alphabets[1] = "B";
                    alphabets[2] = "C";
                    // you can declare as: var alphabets =new Array("A","B","C","D");
                    //...
                </script>
               <p:dataTable id="resultTable" var="car" value="#{myBean.carList}" rowIndexVar="rowNum">        
                    <p:column headerText="No.">
                        <script type="text/javascript">
                            document.write(alphabets[#{rowNum}]);
                        </script>
                    </p:column>
                   <p:column headerText="Name" >
                     #{car.name}
                   </p:column>        
               </p:dataTable>

答案 1 :(得分:2)

或者,如果您的环境支持EL 2.2,您可以使用参数调用方法。我们知道'A'的Unicode表示是'41'(或'a'是'61'),我们可以使用Character.toChars(int codePoint)实用程序方法来执行转换:

Character.toChars(rowNumber + 41)[0]; //for capital letters

因此,在数字栏中只需使用

<h:outputText value="#{bean.calculateRowIndexChar(rowNum)}"/>

使用bean方法

public char calculateRowIndexChar(int rowNumber) {
    return Character.toChars((rowNumber % 26) + 41)[0];
}

如果您的环境不支持EL 2.2,您可以按照How to create a custom EL function?中的BalusC所述创建自定义EL功能。

答案 2 :(得分:2)

您可以使用Ascii字符。 例如 A - A和 B - B .....
同样,您可以使用&amp; ## {64+(rowNum + 1)};