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> ];