Struts2 можно итерацию к определенному индексу, используя тег итератора Struts - PullRequest
1 голос
/ 22 октября 2011

например:

<s:iterator value="countries">
  <s:iterator value="cities">
    <s:property value="name"/>, <s:property value="[1].name"/><br>
  </s:iterator>
</s:iterator>

Это отобразит

Wellington, New Zealand
Auckland, New Zealand
Moscow, Russia
Glasgow, Scotland
Edinburgh, Scotland
Stockholm, Sweden

Я хочу отобразить

New Zealand
-----------
Wellington 
Auckland

Russia
------
Moscow

Scotland
--------
Glasgow 
Edinburgh ..

etc ..

Любая помощь будет принята с благодарностью!

Ответы [ 2 ]

2 голосов
/ 22 октября 2011

Пожалуйста, посмотрите этот пример:

Bean:

public class Country {
    private String [] cities;
    private String name;

    public String[] getCities() {
        return cities;
    }

    public void setCities(String[] cities) {
        this.cities = cities;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

Класс действия:

public class MyAction extends ActionSupport {

    private Country [] countries;

    public String doCountryList() {

        countries = new Country[4];
        String [] cities = new String[] {"Wellington", "Auckland"};
        countries[0] = new Country();
        countries[0].setCities(cities);
        countries[0].setName("New Zealand");

        cities = new String[] {"Moscow"};
        countries[1] = new Country();
        countries[1].setCities(cities);
        countries[1].setName("Russia");

        cities = new String[] {"Glasgow", "Edinburgh"};
        countries[2] = new Country();
        countries[2].setCities(cities);
        countries[2].setName("Scotland");

        cities = new String[] {"Stockholm"};
        countries[3] = new Country();
        countries[3].setCities(cities);
        countries[3].setName("Sweden");

        return SUCCESS;
    }

    public Country[] getCountries() {
        return countries;
    }

    public void setCountries(Country[] countries) {
        this.countries = countries;
    }
}

Jsp:

    <s:iterator value="countries" var="country">
          <s:property value="#country.name"/><br/>
          --------------<br/>
          <s:iterator value="#country.cities" var="city">
               <s:property value="city"/><br>
          </s:iterator>
          <br/>
     </s:iterator>

Если ваш бин имеет такой тип, вы можете реализовать вышеуказанный стиль использования.

1 голос
/ 22 октября 2011

Я с Джеймсом, это должно быть в структуре данных - как закодировано, это выглядит хрупким.Если ваши массивы уже существуют так, как вы хотите, вы должны просто иметь возможность перемещать вещи туда, где вы на самом деле их хотите.

Вы должны использовать структуру, но предпочитать коллекции массивам (в псевдокоде):

class Country {
    String name
    List cities
    Country(name)
    Country(name, ... cities)
    void add(City)
}

Добавьте статический импорт и утилиты:

Country c = country("Brobdingnag", 
                    city("Laputa"),
                    city("Balnibarbi"),
                    city("Luggnagg"));

JSP становится:

<s:iterator value="countries">
    ${name}<br/>
    --------------<br/>
    <s:iterator value="cities">
        ${name}<br/>
    </s:iterator>
    <br/>
</s:iterator>
...