1

使用一个只包含一个字符串列表的简单类,我可以使用类 Listp:dataTableget(int)方法查看它的所有元素,但是当我尝试使用p:dataExporter组件导出它时它失败了。

这是Java源代码:

@ManagedBean
@SessionScoped
public class MainClass {

private List<ArrayList<String>> listOfListOfString;

public List<ArrayList<String>> getListOfListOfString() {
    return listOfListOfString;
}

public void setListOfListOfString(List<ArrayList<String>> listOfListOfString) {
    this.listOfListOfString = listOfListOfString;
}

public MainClass() {
    listOfListOfString = new ArrayList<ArrayList<String>>();
    ArrayList<String> firstList = new ArrayList<String>();
    firstList.add("a");
    firstList.add("b");
    listOfListOfString.add(firstList);
    ArrayList<String> secondList = new ArrayList<String>();
    secondList.add("1");
    secondList.add("2");
    listOfListOfString.add(secondList);
}
}

和 XTHML 代码:

    <h:body>
    Hello from Facelets
    <h:form prependId="false">
        <p:dataTable id="tbl" var="myList" value="#{mainClass.listOfListOfString}" paginator="true" rows="10" > 
            <p:column headerText="First column"> 
                <h:outputText value="#{myList.get(0)}"/>
            </p:column>  
            <p:column headerText="Second column">  
                <h:outputText value="#{myList.get(1)}"/>
            </p:column>
        </p:dataTable>

        <h:commandLink  value=" csv">
            <p:dataExporter type="csv" target="tbl" fileName="userList" />
        </h:commandLink>
    </h:form>
</h:body>

当我点击 csv 链接时的错误堆栈:

For input string: "get"
- Stack Trace

 java.lang.NumberFormatException: For input string: "get"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
at java.lang.Integer.parseInt(Integer.java:449)
at java.lang.Integer.parseInt(Integer.java:499)
at javax.el.ListELResolver.coerce(ListELResolver.java:173)
at javax.el.ListELResolver.getType(ListELResolver.java:72)

你知道为什么p:dataTable可以使用该get(int)方法而p:dataExporter不能吗?

谢谢,

菲利普

4

1 回答 1

2

可能这两个组件的实现方式不同。

但是您可以通过这种方式访问​​列表元素:

#{myList[n]}

n列表索引在哪里。

于 2012-05-31T08:14:15.573 回答