我正在使用带分页的DisplayTag来显示List对象。 Transactions有一个名为'company'/ getCompany()的属性,它是Company对象。 Company对象包含一个名为'name'/ getName()的字符串。
我的代码如下所示:
<display:table name="${transactions}" id="transaction" pagesize="2" defaultsort="1">
<display:column property="id" title="ID" href="showTransactionDetails.html" paramId="id" />
<display:column property="company.name" title="Company Name" sortable="true" >
<display:column property="status" title="Status" sortable="true">
</display:table>
这是一个奇怪的部分....当第一页显示时,一切都很好,总共有11页,每页包含2条记录。
我可以点击页码并查看页面前进。但由于一些奇怪的原因,当我点击第(2-4)页时,我得到一个例外:
org.apache.jasper.JasperException: javax.servlet.ServletException: javax.servlet.jsp.JspException: 例外:[。LookupUtil]查找错误 对象中的属性“company.name” 类型 “com.replacements.entity.Transaction”。 原因:null
(同样重要的是要注意,所有的Transaction记录都包含company.name的值,因为它是我的DB中的必填字段)
答案 0 :(得分:2)
该公司是否可能为空。也就是说,您在数据库中没有公司的交易。
答案 1 :(得分:2)
我通过将Hibernate映射中的company属性更改为“lazy = false”
来解决它我仍然不确定为什么分页在某些页面上起作用而不是全部。但这解决了它。
谢谢大家的意见。
答案 2 :(得分:1)
正如@Vincent所说,可能company
为空。您的数据库中可能有值,但可能存在Transaction
类未正确读取db值并设置其company
成员的问题。您是否尝试过设置断点并查看Transaction
实例?
答案 3 :(得分:1)
我的第一个猜测是有一个空的公司名单。我建议你打印转储输出你的交易结果,然后才能到达显示部分。
如果这不是问题,我看到了由特殊字符引起的显示问题。其中一个公司名称可能包含控制字符或其他一些不可显示的字符。
答案 4 :(得分:1)
尝试将name="${transactions}"
代码中的display:table
更改为name="transactions"
。
假设您在会话或请求中拥有transactions
集合或其他任何内容。
答案 5 :(得分:0)
异常消息字面上告诉Transaction
是null
。因此,null
后面的交易列表中显然有一个${transactions}
项。看起来像是事务列表的加载/填充逻辑中的错误。也许最后一项是null
?或者列表是请求作用域,并且依赖于后续请求中缺少的某些请求参数,以便加载/填充列表失败?
对于感兴趣的人,如果某些人认为Company
为空,那么EL就不会有错误。它会提到对象类型Company
。
答案 6 :(得分:0)
一个requestURI标签......就像这样...... requestURI =“
答案 7 :(得分:0)
确保您的类中包含所有属性的setter和getters方法以及匹配属性名称的名称。