Ошибка DisplayTag
Я использую DisplayTag с нумерацией страниц для отображения объектов List. Транзакции имеют свойство под названием '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: Exception: [.LookupUtil] Ошибка при поиске свойства "company.name" в типе объекта "com.replacements.entity.Transaction". Причина: ноль
(Также важно отметить, что все записи Транзакции содержат значение для company.name, так как это обязательное поле в моей БД)
8 ответов
Возможно ли, что компания является нулевой. То есть, у вас есть транзакция без компании в базе данных.
Я решил эту проблему, изменив свойство компании в отображении Hibernate на "lazy=false"
Я до сих пор не уверен, почему нумерация страниц работала на некоторых страницах, а не на всех. Но это исправило это.
Спасибо всем за ваши идеи.
Мое первое предположение - пустой список компаний. Я бы посоветовал вам распечатать дамп, чтобы вывести результаты ваших транзакций до того, как они попадут в область отображения.
Если это не проблема, я видел проблемы с отображением, вызванные специальными символами. Одно из названий компаний может содержать управляющий символ или какой-либо другой не отображаемый символ.
Как говорит @Vincent, скорее всего company
нулевой. Вы можете иметь значение в вашей базе данных, но, возможно, есть проблема, когда ваш Transaction
класс не правильно читает значение БД и устанавливает его company
член. Вы пытались установить точку останова и смотреть на Transaction
пример?
Попробуйте изменить name="${transactions}"
в display:table
тег к name="transactions"
,
Если у вас есть transactions
сбор в сеансе или запросе или что-то еще.
Убедитесь, что у вас есть методы установки и получения для всех атрибутов в вашем классе и имена, соответствующие именам атрибутов.
Сообщение об исключении буквально говорит о том, что Transaction
является null
, Таким образом, по-видимому, есть null
элемент в списке транзакций позади ${transactions}
, Похоже на ошибку в логике загрузки / заполнения списка транзакций. Может быть, последний пункт null
? Или, может быть, список является областью запроса и зависит от некоторых параметров запроса, которые отсутствуют в последующем запросе, так что загрузка / заполнение списка не удалась?
Для заинтересованных, если Company
был нулевым, как некоторые предполагают, EL не ошибся таким образом. Было бы упомянуто тип объекта Company
вместо.