如何使用Spring MVC将Java Map放入Optgroup选项?

问题描述 投票:2回答:2

我正在使用Spring MVC。

我目前有一个地图,通过request.setAttribute('userLocales',bluh bluh bluh)从Java传递到我的页面,该变量名为“ userLocales”]

我需要以某种方式获取该变量中的字符串,以在optgroup select元素中构建选项元素的列表。我最初的想法是以某种方式将此Map转换为Javascript对象,然后将字符串添加到新创建的option元素中以放置在optgroup元素中。

optgroup元素是静态的,并且已经创建。我只需要其中包含字符串的选项。

java javascript spring-mvc option optgroup
2个回答
5
投票
来源:http://www.imrantariq.com/blog/option-group-capability-for-spring-mvc-form-taglib/

“ optgroup”属性在设置时将首先按照“ optgroup”中定义的“表达式”进行排序,然后跟踪迭代的进度,并在适当的位置插入“ optgroup” html起始标记和结束标记选择列表,使用“ optgroup”中的表达式作为标签。

[不幸的是,当前spring mvc尚未通过其标签提供这种功能。这可以通过下面给出的良好逻辑来实现。您需要从控制器发送一个hashMap。

Map<String, ArrayList<String>>

在此映射中,字符串是键,即组名,而arraylist是该组中的值数。 Jsp代码可以用这种方式编写。

<form:select multiple="single" path="itemType" id="itemType">
    <form:option value="0" label="Select" />
    <c:forEach var="itemGroup" items="${itemTypeList}" varStatus="itemGroupIndex">
       <optgroup label="${itemGroup.key}">
           <form:options items="${itemGroup.value}"/>        
       </optgroup>
    </c:forEach>        
</form:select>

0
投票
Controller

注意,集合为Map<String, List<KeyValueBean>>

它存储例如Group 1 -> { ("Option 1.1 Label","OPTION_1_1_VAL"), ("Option 1.2 Label","OPTION_1_2_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; }

JSP

<form:select path="careerSelected" id="careerElement"> <form:option label="" value="" /> <c:forEach var="optionGroup" items="${careerOptions}"> <optgroup label="${optionGroup.key}"> <c:forEach var="option" items="${optionGroup.value}"> <form:option label="${option.key}" value="${option.value}" /> </c:forEach> </optgroup> </c:forEach> </form:select>

KeyValueBean
(我创建了自己的,但是Java内置的是AbstractMap.SimpleEntry<K,V> -您可以使用该代码,只是代码有点难看)]]

AbstractMap.SimpleEntry<K,V>

另一种情况:有时选择项是

MIXED

(与OptGroup平混)
public class KeyValueBean implements Serializable { private static final long serialVersionUID = 1L; private String key; private String value; public KeyValueBean(String key, String value) { this.key = key; this.value = value; } public String getKey() { return key; } public void setKey(String key) { this.key = key; } public String getValue() { return value; } public void setValue(String value) { this.value = value; } } 在这种情况下,Collection可以是Map,其中每个条目都将被键到
Object

任一

(1)一个字符串或(2)一个HashMap,我们将从JSP中发现它。

MIXED

数据结构的控制器
A B C (subgroup) - C.1 - C.2
用于混合数据结构的JSP(确定是否需要Collection的技巧,通过迭代和设置var完成)
在JSP中,我们需要确定要获取Collection还是String。唯一的方法是通过迭代并设置变量。

@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; }

© www.soinside.com 2019 - 2024. All rights reserved.