我想在JSP页面上显示多个下拉列表。我正在使用Struts并在我的JSP页面中获取以下数据对象。
<%
Map<String, CustomObject> data = (Map<String, CustomObject>)renderRequest.getAttribute("data");%>
第一个列表(称为A)显示数据中的所有键,并定义如下。
<select id="A" name="A" onchange="?">
<option value="">Please Select</option>
<c:forEach var="entry" items="${data}">
<option value="${entry.key}">${entry.key}</option>
</c:forEach>
</select>
我不确定如何定义剩余列表,但我想要的是基于A中的选择,应使用与A对应的CustomObject动态填充剩余的三个下拉列表(A中的值是数据中的键)。 CustomObject类定义如下
class CustomObject{
List<String> b;
List<String> c;
List<String> d;
}
我不想使用Ajax,因为Map中已经存在所需的所有数据。任何想法我怎么能实现这一点。
由于
答案 0 :(得分:0)
我找到的解决方案是声明三个全局javascript变量,并使用请求中传递的Map将它们初始化为每个子下拉列表的值,例如
var dataB = { <c:forEach items="${data}" var="item" varStatus="loop">
"${item.key}" : [ <c:forEach items="${item.value.list}" var="value"
varStatus="subLoop"> "${value}" ${not subLoop.last ? ',':''
</c:forEach> ]
${not loop.last ? ',' : ''}
</c:forEach> };
然后有一个名为onChange of Dropdown A的方法,并使用与DropDown A中的选择对应的值填充下拉列表。
我不确定解决方案有多优雅,但它有效。