2

我正在使用带有分页的 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] 在对象类型“com.replacements.entity.Transaction”中查找属性“company.name”时出错。原因:空

(还需要注意的是,所有交易记录都包含 company.name 的值,因为它在我的数据库中是必填字段)

4

8 回答 8

2

公司有没有可能是空的。也就是说,您有一个数据库中没有公司的事务。

于 2010-02-16T22:49:33.700 回答
2

我通过将 Hibernate 映射中的公司属性更改为“lazy=false”来解决它

我仍然不确定为什么分页从某些页面而不是全部页面起作用。但这解决了它。

谢谢大家的想法。

于 2010-02-17T02:11:22.950 回答
1

正如@Vincent 所说,可能company为空。您的数据库中可能有一个值,但可能存在您的Transaction类没有正确读取 db 值并设置其company成员的问题。您是否尝试过设置断点并查看Transaction实例?

于 2010-02-16T22:59:08.683 回答
1

我的第一个猜测是有一个空的公司列表。我建议您在交易结果到达显示部分之前打印转储以输出您的交易结果。

如果这不是问题,我已经看到由特殊字符引起的显示问题。其中一个公司名称可能包含控制字符或其他一些不可显示的字符。

于 2010-02-16T23:03:35.070 回答
1

尝试将name="${transactions}"标签中的display:table更改为name="transactions".

假设您transactions在会话或请求或其他任何内容中有集合。

于 2010-02-17T00:11:50.717 回答
0

一个 requestURI 标记......就像这样...... requestURI="

于 2010-12-01T14:16:40.960 回答
0

异常消息从字面上说明Transactionis null。因此,null后面的交易列表中显然有一个项目${transactions}。看起来像是事务列表的加载/填充逻辑中的错误。也许最后一项是null?或者,该列表可能是请求范围的,并且依赖于后续请求中缺少的某些请求参数,因此加载/填充列表失败?

对于感兴趣的人,如果Company如某些人建议的那样为 null,EL 就不会那样出错。它会提到对象类型Company

于 2010-02-16T23:23:44.167 回答
0

确保您的类中的所有属性都有 setter 和 getter 方法,并且名称与属性名称匹配。

于 2012-11-30T09:33:02.860 回答