Java Spring表单标记库的选项组功能
我们可以用HTML编写Java Spring表单标记库的选项组功能,java,spring,select,spring-mvc,taglib,Java,Spring,Select,Spring Mvc,Taglib,我们可以用HTML编写 <select name="..." value"..."> <optgroup label="Category 1"> <option ... /> <option ... /> </optgroup> <optgroup label="Category 2"> <option ... /> <option ... /> </optgroup&g
<select name="..." value"...">
<optgroup label="Category 1">
<option ... />
<option ... />
</optgroup>
<optgroup label="Category 2">
<option ... />
<option ... />
</optgroup>
</select>
在Spring
标签中,我们如何编写类似于分组项目的东西。仍有待解决。
建议而不是使用表单:选项使用jstl和el来构建列表 不幸的是,目前spring mvc没有通过其标签提供这种功能。这可以通过给出的良好逻辑来实现。控制器 注意集合是
Map
它存储例如组1->
{(“选项1.1标签”,“选项1\u 1\u VAL”),(“选项1.2标签”,“选项1\u 2\u VAL”),…}
@ModelAttribute("careerOptions")
Map<String, List<KeyValueBean>> getCareerOptions() {
HashMap<String, List<KeyValueBean>> result = new HashMap<String, List<KeyValueBean>>();
result.put("Grp1", new ArrayList<KeyValueBean>());
result.get("Grp1").add(new KeyValueBean("Option 1.1", "OPT_1_1"));
result.get("Grp1").add(new KeyValueBean("Option 1.2", "OPT_1_2"));
result.put("Grp2", new ArrayList<KeyValueBean>());
result.get("Grp2").add(new KeyValueBean("Option 2.1", "OPT_2_1"));
return result;
}
另一种情况:有时选择的项目是混合的(与OptGroup完全混合)
在这种情况下,集合可以是Map
,其中每个条目都将键入一个对象:(1)一个字符串或(2)一个HashMap,我们将从JSP中发现
用于混合数据结构的控制器
@ModelAttribute("careerOptionsMixed")
Map<String, Object> getCareerOptionsMixed() {
LinkedHashMap<String, Object> result = new LinkedHashMap<String, Object>();
result.put("Flat Option 1", "OPT_1_FLAT");
result.put("Group Option 2", myHashMap); // Fill out your HashMap for Group (Key->Value) and add it here
result.put("Flat Option 3", "OPT_3_FLAT");
return result;
}
@modeldattribute(“careerOptionsMixed”)
映射getCareerOptionsMixed(){
LinkedHashMap结果=新建LinkedHashMap();
结果.看跌期权(“平仓期权1”、“平仓期权1”);
result.put(“组选项2”,myHashMap);//填写组的HashMap(键->值),并将其添加到此处
结果。看跌期权(“平仓期权3”、“平仓期权3”);
返回结果;
}
混合数据结构的JSP(确定是否收集所需的技巧,通过迭代和设置变量来完成)
在JSP中,我们需要确定是获得集合还是字符串。唯一的方法是通过迭代和设置变量
<form:select path="career" id="careerField">
<form:option label="" value="" />
<c:forEach var="optionOrOptionGroup" items="${careerOptionsMixed}">
<%-- Must use iteration to find out if this is a Collection or not: https://stackoverflow.com/a/1490171/1005607 --%>
<c:set var="collection" value="false" />
<c:forEach var="potentialOptionGroup" items="${optionOrOptionGroup.value}" varStatus="potentialOptionGroupStatus">
<c:if test="${potentialOptionGroupStatus.index > 0}">
<c:set var="collection" value="true" />
</c:if>
</c:forEach>
<c:choose>
<c:when test="${collection eq true}">
<%-- Now we know this is a LinkedHashMap --%>
<optgroup label="${optionOrOptionGroup.key}">
<c:forEach var="optionGroup" items="${optionOrOptionGroup.value}">
<form:option label="${optionGroup.key}" value="${optionGroup.value}" />
</c:forEach>
</optgroup>
</c:when>
<c:otherwise>
<%-- Now we know this is a flat String --%>
<form:option label="${optionOrOptionGroup.key}" value="${optionOrOptionGroup.value}" />
</c:otherwise>
</c:choose>
</c:forEach>
</form:select>
链接现在已失效,最好发布内容。此链接也失效:(
A
B
C (subgroup)
- C.1
- C.2
@ModelAttribute("careerOptionsMixed")
Map<String, Object> getCareerOptionsMixed() {
LinkedHashMap<String, Object> result = new LinkedHashMap<String, Object>();
result.put("Flat Option 1", "OPT_1_FLAT");
result.put("Group Option 2", myHashMap); // Fill out your HashMap for Group (Key->Value) and add it here
result.put("Flat Option 3", "OPT_3_FLAT");
return result;
}
<form:select path="career" id="careerField">
<form:option label="" value="" />
<c:forEach var="optionOrOptionGroup" items="${careerOptionsMixed}">
<%-- Must use iteration to find out if this is a Collection or not: https://stackoverflow.com/a/1490171/1005607 --%>
<c:set var="collection" value="false" />
<c:forEach var="potentialOptionGroup" items="${optionOrOptionGroup.value}" varStatus="potentialOptionGroupStatus">
<c:if test="${potentialOptionGroupStatus.index > 0}">
<c:set var="collection" value="true" />
</c:if>
</c:forEach>
<c:choose>
<c:when test="${collection eq true}">
<%-- Now we know this is a LinkedHashMap --%>
<optgroup label="${optionOrOptionGroup.key}">
<c:forEach var="optionGroup" items="${optionOrOptionGroup.value}">
<form:option label="${optionGroup.key}" value="${optionGroup.value}" />
</c:forEach>
</optgroup>
</c:when>
<c:otherwise>
<%-- Now we know this is a flat String --%>
<form:option label="${optionOrOptionGroup.key}" value="${optionOrOptionGroup.value}" />
</c:otherwise>
</c:choose>
</c:forEach>
</form:select>