Перебор списка объектов с отображаемым тегом jsp

Я новичок в jsp и заинтересован в теге отображения для его функциональности экспорта. Скажем, у меня есть эта простая структура:

 public class MyActionBean implements ActionBean{
      List<Country> countries;
      // getters and setters and some other un-related logic
 }


public class Country {
    List<String> countryName;
    List<Accounts> accounts;
    // getters and setters and some other un-related logic
}


public class Accounts {
    private FinancialEntity entity;
    // getters and setters and some other un-related logic
}

public class FinancialEntity {
    String entityName;
    // getters and setters and some other un-related logic
}

Теперь я хочу создать таблицу, в которой будет два столбца: название страны и имя объекта (FinancialEntity).

     <display:table id="row" name="${myActionBean.countries}" class="dataTable" pagesize="30" sort="list" defaultsort="8"  export="true" requestURI="">
        <display:column title="Country" sortable="true" group="1" property="countryName" />
        <display:column title="Financial Entity"> somehow get all of the entity names associated with the country? </display:column>
     </display:table>

Итак, по сути, я хочу перебрать счета и получить все финансовые объекты. Я не знаю, как это сделать в JSP с помощью displaytag. Пробовал использовать тэг c:forEach и display:setProperty, но похоже этот тэг не для этих целей. Я смертельно застрял :(

Заранее спасибо :)


person user1039063    schedule 16.10.2013    source источник


Ответы (1)


Вам не нужно выполнять работу в jsp. Вы можете выполнить эту работу в объекте модели и контроллере.

public class CountryFinancialEntity {
    private Country country;
    public CountryFinancialEntity(Country country) {
        this.country = country;
    }
    public String getCountryName() {
        return this.country.getName();
    }
    public List<String> getFinancialEntityNames() {
        List<String> financialEntityNames = new ArrayList<String>
        for (Account account : this.country.getAccounts() {
            financialEntityNames.add(account.getFinancialEntity().getName();
        }
    }
}

Затем составьте список этих объектов для всех ваших стран и передайте этот объект вашему представлению (jsp).

Надеюсь, это упростит использование тегов отображения и позволит вам использовать тег c:forEach.

ИЗМЕНИТЬ

Если вы ДОЛЖНЫ выполнять эту работу в файле jsp.

Я бы рекомендовал просто пройти список стран. MyActionBean действительно не помогает и может вызвать путаницу.

Ваш jsp будет выглядеть примерно так:

<display:table id="country" name="countries">
    <display:column title="Country Name" property="name" />
    <display:column title="Financial Name" >
        <ul>
        <c:forEach var="account" items="${country.accounts}">
            <li>${account.financialEntity.name}</>
        <c:forEach>
        </ul>
    </display:column>
</display:table>

Кстати, это, скорее всего, то, как CountryFinancialEntity будет выглядеть, если подумать, но если вы собираетесь иметь другие столбцы, используйте что-то вроде объекта CountryFinancialEntity, но вместо этого назовите его TableRowModel.

person hooknc    schedule 16.10.2013
comment
привет, большое спасибо за ответ. Однако это не сработает. Причина в том, что будет несколько столбцов (я упомянул только два, но их больше), и мне нужно сделать это через jsp :( - person user1039063; 16.10.2013