Vyplnění pole JavaScript ze seznamu JSP

Dobře, možná mi někdo pomůže s problémem, který se snažím vyřešit. V podstatě mám stránku JSP, která získává seznam objektů Země (z metody referenceData() z Spring Portlet SimpleFormController, není to zcela relevantní, ale pouze se zmiňuje pro případ, že je). Každý objekt Země má sadu objektů provincie a každá provincie a země má pole názvu:

public class Country  {
    private String name;
    private Set<Province> provinces;

    //Getters and setters
}

public class Province {
    private String name;

    //Getters and setters
}

Nyní mám ve svém JSP dvě rozbalovací nabídky pro země a provincie a chci filtrovat provincie podle země. Postupoval jsem podle tohoto tutoriálu/průvodce, jak vybrat řetěz v JavaScriptu.

Nyní potřebuji dynamický způsob, jak z mého obsahu vytvořit pole JavaScriptu. A než někdo zmíní AJAX, je to vyloučené, protože náš projekt používá portlety a my bychom se rádi drželi dál od používání frameworků jako DWR nebo vytváření servletů. Zde je JavaScript/JSP, který zatím mám, ale nezaplňuje pole ničím:

var countries = new Array();
<c:forEach items="${countryList}" var="country" varStatus="status">
    countries[status.index] = new Array();
    countries[status.index]['country'] = ${country.name};
    countries[status.index]['provinces'] =
    [
        <c:forEach items="${country.provinces}" var="province" varStatus="provinceStatus">
            '${province.name}'
            <c:if test="${!provinceStatus.last}">
              ,
            </c:if>
        </c:forEach>
    ];
</c:forEach>

Ví někdo, jak vytvořit pole JavaScriptu v JSP ve výše uvedeném případě nebo jaký by byl v tomto případě zvažován „nejlepší postup“? Předem děkuji!

Odpověď

var countries = new Array();
<c:forEach items="${countryList}" var="country" varStatus="status"> 
    countryDetails = new Object();
    countryDetails.country = ${country.name}; 
    var provinces = new Array();

        <c:forEach items="${country.provinces}" var="province" varStatus="provinceStatus"> 
           provinces.push(${province.name});
        </c:forEach> 
    countryDetails.provinces = provinces;
    countries.push(countryDetails);
</c:forEach> 

teď to, co máte, je něco takového v javascriptu

var countries = [
  {country:"USA",
  provinces: [
    "Ohio",
    "New York",
    "California"
  ]},
  {country:"Canada",
  provinces: [
    "Ontario",
    "Northern Territory",
    "Sascetchewan"
  ]},
]

Druhou možností by bylo, aby váš výstup vypadal jako javascript, který jsem zveřejnil.

var countries = [
<c:forEach items="${countryList}" var="country" varStatus="status">  
    {country: '${country.name}',
    provinces : [ 
        <c:forEach items="${country.provinces}" var="province" varStatus="provinceStatus">  
           '${province.name}'
           <c:if test="${!provinceStatus.last}">    
             ,    
           </c:if>   
        </c:forEach>  
    ]}
    <c:if test="${!status.last}">    
      ,    
    </c:if>  
    </c:forEach>  
];