Хорошо поэтому, возможно, кто-то может помочь мне с проблемой, которую я пытаюсь решить. По существу у меня есть страница 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 в случае выше или чем 'лучшую практику' рассмотрели бы в этом случае?Заранее спасибо!
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>
];
Рассматривали ли вы использование JSON ? Есть несколько библиотек, которые могут принимать общий сбор и вывод JSON для Java и других языков .
Основная проблема в вашем коде заключается в том, что вы забыли поместить «status.index» в $ {}
.
countries[${status.index}] = new Array();
Теперь, с учетом сказанного, это был бы довольно плохой способ делать что-то, потому что в конечном итоге на вашей странице будет много кода Javascript. Намного лучше создать список с использованием нотации объектов Javascript, как во втором ответе @John Hartsock.