好吧也许有人可以帮助我解决我正在努力解决的问题。本质上我有一个JSP页面,它获取Country对象的列表(来自Spring Portlet SimpleFormController的方法referenceData(),不完全相关,但只是提到它)。每个Country对象都有一组省对象,每个省和国家都有一个名称字段:
public class Country {
private String name;
private Set<Province> provinces;
//Getters and setters
}
public class Province {
private String name;
//Getters and setters
}
现在我的JSP中有两个用于国家和省份的下拉菜单,我想按国家/地区过滤省份。我一直在关注这个tutorial/guide以在JavaScript中进行链选择。
现在我需要一种动态的方法来从我的内容创建JavaScript数组。在任何人提到AJAX之前,这是不可能的,因为我们的项目使用portlet,我们希望远离使用DWR等框架或创建servlet。这是我到目前为止的JavaScript / JSP,但它没有用任何东西填充数组:
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>
在上述情况下,是否有人知道如何在JSP中创建JavaScript数组,或者在这种情况下会考虑“最佳实践”?提前谢谢!
答案 0 :(得分:24)
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>
];
答案 1 :(得分:3)
您是否考虑过使用JSON?有几个库可以采用通用集合并输出JSON for Java and other languages。
答案 2 :(得分:1)
代码中的主要问题是您忘记将“status.index”放在${ }
中。
countries[${status.index}] = new Array();
现在,那说,这将是一个非常糟糕的做事方式,因为你的页面中最终会有一个很多的Javascript代码。使用Javascript对象表示法创建列表要好得多,就像@John Hartsock的答案中的第二个一样。