Разбиение на страницы через Struts2 с использованием DisplayTag Library Framework

Я хочу применить разбиение на страницы для некоторого класса моего приложения, в котором я использую spring, struts2 и hibernate. Здесь я вызываю класс действий из файла welcome.jsp. Он имеет следующий код:

<s:form action="marketing/allCountry.action">  
         <s:submit value="Click"></s:submit>  
         </s:form>  

Теперь мой allCountry.action класс java имеет следующий код:

public String executeAction() throws Exception {
        try {
            countryList = new ArrayList<Country>();
            countryList = this.countrySecurityProcessor.findByAll(0, null, null, null, null, false, false, null, null, null, null, 0);
            System.out.println("countryList = "+countryList);
            return ActionSupport.SUCCESS;

        } catch (Exception ex) {
            return ActionSupport.ERROR;
        }
}

Он правильно извлекает данные, что я подтвердил, распечатав объект countryList. Но теперь я перенаправляюсь с SUCCESS на country.jsp. Код country.jsp:

<display:table list="countryList" requestURI="CountryAllAction" pagesize="3">
    <display:column property="id" title="ID" />
    <display:column property="name" />
</display:table>

Теперь во время выполнения моего приложения я получаю ошибку времени выполнения, например:

javax.servlet.ServletException: javax.servlet.ServletException: Exception: [.LookupUtil] Ошибка при поиске свойства "id" в типе объекта "java.lang.String". Причина: неизвестное свойство 'id'

Каково решение этого типа ошибки?


person Nirmal    schedule 22.04.2009    source источник


Ответы (5)


Вам нужно иметь геттер для вашего списка стран в вашем действии.

List<Country> countryList = new ArrayList<Country>();

public String executeAction() throws Exception {
  try {
     countryList = this.countrySecurityProcessor.findByAll(0, null, null, null, null, false, false, null, null, null, null, 0);
     System.out.println("countryList = "+countryList);
     return ActionSupport.SUCCESS;

  } catch (Exception ex) {
     return ActionSupport.ERROR;
  }

}

public List<Country> getCountryList() {
  return countryList;
}
person Ruggs    schedule 22.04.2009

Я не знаком со Struts2, но кажется, что DisplayTag не может найти ваш список стран ни в какой области.

Я не вижу, чтобы вы добавляли список стран из или по запросу. Если я не прав, возможно, вам нужно указать имя формы, например <display:table list="${yourStrutsFormName.countryList}" ...

person andrey    schedule 22.04.2009

Вам нужно сделать "countryList" доступным для DisplayTag, например. сделав что-то вроде:

   request.setAttribute("countryList", countryList);

в вашем действии (если нет более умного способа Struts2 сделать это). Я думаю, вы можете получить запрос в своем действии, реализовав его ServletRequestAware

Вам также необходимо убедиться, что ваш класс Country имеет свойства id и name.

person A_M    schedule 23.04.2009

Используйте следующий код. Вместо атрибута списка используйте атрибут имени.

<display:table name="countryList" requestURI="CountryAllAction" pagesize="3">
 <display:column property="id" title="ID" />
 <display:column property="name" />
</display:table>
person Community    schedule 01.07.2009

вам не нужно ничего делать, просто используйте переменную списка в имени отображаемого тега, т.е.

<display:table name="yourListnameinaction">

</display>
person Community    schedule 25.08.2009