List 在JSF2.2中用列表填充数据表
我试图复制本指南,但使用jsf 2.2: 我当前的设置:名为Message的类包含日期、字符串和名为“name”(其所有者)的帐户对象。MessageBean类有一个列表对象messageSet,它在MessageBean构造函数中初始化。JSF页面用messageList填充一个表。然而,这张桌子并没有被填满。在调试器中查看列表对象时,它确实会被有效的消息对象填充。我的班级: @命名(value=“messageBean”) @会议范围 公共类MessageBean实现了可序列化 { 私有列表消息集List 在JSF2.2中用列表填充数据表,list,jsf,datatable,List,Jsf,Datatable,我试图复制本指南,但使用jsf 2.2: 我当前的设置:名为Message的类包含日期、字符串和名为“name”(其所有者)的帐户对象。MessageBean类有一个列表对象messageSet,它在MessageBean构造函数中初始化。JSF页面用messageList填充一个表。然而,这张桌子并没有被填满。在调试器中查看列表对象时,它确实会被有效的消息对象填充。我的班级: @命名(value=“messageBean”) @会议范围 公共类MessageBean实现了可序列化 { 私有列
public MessageBean()
{
this.messageSet = Controller.Controller.getLatestKweks();
}
public List<Message> getMessageSet()
{
return messageSet;
}
public void setMessageSet(List<Message> messageSet)
{
this.messageSet = messageSet;
}
}
组件树:
<UIViewRoot id="j_id1" inView="true" locale="en_GB" renderKitId="HTML_BASIC" rendered="true" transient="false" viewId="/hoofdpagina.xhtml">
<html xmlns="http://www.w3.org/1999/xhtml">
<UIOutput id="j_idt2" inView="true" rendered="true" transient="false">
<title>Main page</title>
</UIOutput>
<UIOutput id="j_idt4" inView="true" rendered="true" transient="false">
<div id="menu">top</div> <div id="currentMessages">
<HtmlDataTable border="-2147483648" first="0" id="j_idt6" inView="true" rendered="true" rowIndex="0" rowStatePreserved="false" rows="0" transient="false" var="mes">
<UIColumn header="Datum" id="j_idt7" inView="true" rendered="true" transient="false">
header
Date
#{mes.mesDate}
</UIColumn>
<UIColumn header="Name" id="j_idt10" inView="true" rendered="true" transient="false">
header
Name
#{mes.name.accountName}
</UIColumn>
<UIColumn header="Inhoud" id="j_idt13" inView="true" rendered="true" transient="false">
header
Content
#{mes.mesContent}
</UIColumn>
</HtmlDataTable>
</div>
</UIOutput>
</html>
</UIViewRoot>
有人知道为什么该表无法填充吗?您的Hibernate/JPA查询已中断。
getLatestKweks()
后面的代码实际上返回的是一个列表,而不是列表
证据在堆栈跟踪中:
java.lang.NumberFormatException: For input string: "mesDate"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:492)
at java.lang.Integer.parseInt(Integer.java:527)
at javax.el.ArrayELResolver.toInteger(ArrayELResolver.java:378)
at javax.el.ArrayELResolver.getValue(ArrayELResolver.java:198)
...
当mesDate
的基(因此,{mes}
)表示类似对象[]的数组时,ArrayELResolver
仅涉及
不是像消息那样的javabean。EL正在尝试使用mesDate
通过索引获取数组项,对于第一个项,它只能是一个类似so{mes[0]}
的整数。但是,字符串值“mesDate”
不能作为整数解析,因此出现此异常
您有两个选项来解决此问题:
- 更改代码以获得
列表
。例如使用{mes[0]}
,{mes[1]}
等
- 修复Hibernate/JPA查询以返回真实的
列表
。将Message.class
指定为类型
另见:
R如果您有任何错误,请原谅我的错误,我已经添加了尝试访问页面时遇到的异常。
<UIViewRoot id="j_id1" inView="true" locale="en_GB" renderKitId="HTML_BASIC" rendered="true" transient="false" viewId="/hoofdpagina.xhtml">
<html xmlns="http://www.w3.org/1999/xhtml">
<UIOutput id="j_idt2" inView="true" rendered="true" transient="false">
<title>Main page</title>
</UIOutput>
<UIOutput id="j_idt4" inView="true" rendered="true" transient="false">
<div id="menu">top</div> <div id="currentMessages">
<HtmlDataTable border="-2147483648" first="0" id="j_idt6" inView="true" rendered="true" rowIndex="0" rowStatePreserved="false" rows="0" transient="false" var="mes">
<UIColumn header="Datum" id="j_idt7" inView="true" rendered="true" transient="false">
header
Date
#{mes.mesDate}
</UIColumn>
<UIColumn header="Name" id="j_idt10" inView="true" rendered="true" transient="false">
header
Name
#{mes.name.accountName}
</UIColumn>
<UIColumn header="Inhoud" id="j_idt13" inView="true" rendered="true" transient="false">
header
Content
#{mes.mesContent}
</UIColumn>
</HtmlDataTable>
</div>
</UIOutput>
</html>
</UIViewRoot>
Name Value
j_idt6 j_idt6
j_idt6:j_idt10 bread
j_idt6:j_idt12 Log in
j_idt6:j_idt8 Donald
AttributesName Value
None
Request AttributesName Value
kwek [Ljava.lang.Object;@a5c775c
Flash AttributesName Value
None
Session AttributesName Value
None
Application AttributesName Value
csfcff [ ]
java.lang.NumberFormatException: For input string: "mesDate"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:492)
at java.lang.Integer.parseInt(Integer.java:527)
at javax.el.ArrayELResolver.toInteger(ArrayELResolver.java:378)
at javax.el.ArrayELResolver.getValue(ArrayELResolver.java:198)
...