Заполнение массива JavaScript из списка JSP

Хорошо поэтому, возможно, кто-то может помочь мне с проблемой, которую я пытаюсь решить. По существу у меня есть страница JSP, которая получает список объектов Страны (из метода referenceData () от Портлета Spring SimpleFormController, не совсем релевантный, но просто упоминающий в случае, если это). Каждый объект Страны имеет ряд объектов области, и каждая область и страна имеют поле имени:

public class Country  {
    private String name;
    private Set provinces;

    //Getters and setters
}

public class Province {
    private String name;

    //Getters and setters
}

Теперь у меня есть два выпадающих меню в моем JSP для стран и областей, и я хочу отфильтровать области страной. Я следовал этому учебному руководству/руководству для создания цепочечного выбора в JavaScript.

Теперь мне нужен динамический способ создать массив JavaScript из моего содержания. И прежде чем любой упоминает Ajax, это вне рассмотрения, так как наш проект использует портлеты, и мы хотели бы избегать использования платформ как DWR или создание сервлета. Вот JavaScript/JSP, который я имею до сих пор, но он не заполняет Массив ни с чем:

var countries = new Array();

    countries[status.index] = new Array();
    countries[status.index]['country'] = ${country.name};
    countries[status.index]['provinces'] =
    [
        
            '${province.name}'
            
              ,
            
        
    ];

Кто-либо знает, как создать массив JavaScript в JSP в случае выше или чем 'лучшую практику' рассмотрели бы в этом случае?Заранее спасибо!

15
задан BalusC 15 June 2010 в 00:25
поделиться

3 ответа

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> 

теперь у вас есть что-то вроде этого в javascript

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

Другой вариант - сделать ваш вывод похожим на опубликованный мною javascript.

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>  
];
24
ответ дан 1 December 2019 в 02:28
поделиться

Рассматривали ли вы использование JSON ? Есть несколько библиотек, которые могут принимать общий сбор и вывод JSON для Java и других языков .

3
ответ дан 1 December 2019 в 02:28
поделиться

Основная проблема в вашем коде заключается в том, что вы забыли поместить «status.index» в $ {} .

countries[${status.index}] = new Array();

Теперь, с учетом сказанного, это был бы довольно плохой способ делать что-то, потому что в конечном итоге на вашей странице будет много кода Javascript. Намного лучше создать список с использованием нотации объектов Javascript, как во втором ответе @John Hartsock.

1
ответ дан 1 December 2019 в 02:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: