Spring forms + JSP:将<select>的值绑定到地图 - 我做错了什么

时间:2016-07-13 18:36:17

标签: spring jsp spring-form

我使用的是spring 3.0.5和tomcat 7 我在做什么: 我在JSP中创建了一个select元素表。每个select都与我的模型中的id相关联,如下所示: &lt; form:form commandName =&#34; someStuff&#34;方法=&#34;后&#34; ID =&#34; peopleForm&#34; onSubmit =&#34; return validate(&#39; $ {someStuff}&#39;);&#34;&gt; &lt;% - 这里有一堆其他不相关的东西 - %&gt; &LT;表&gt;     &lt; th&gt;一些其他信息&lt; / th&gt;     &lt; th&gt;请选择名称&lt; / th&gt;     &lt; c:forEach var =&#34; thisThing&#34;项=&#34; $ {allOfTheThings}&#34;&GT;         &LT; TR&GT;         &lt; td&gt;此处的一些其他信息&lt; / td&gt;         &LT; TD&GT;             &lt; form:select id =&#34; name_for_thing _ $ {thisThing.SomeId}&#34; path =&#34; tempNames [&#39; $ {thisThing.SomeId}&#39;]&#34; thisThingsId =&#34; $ {thisThing.SomeId}&#34;类=&#34; thing_name_selector_class&#34;&GT;                 &lt; option value =&#34;请选择一个&#34;&gt;请选择一个&lt; / option&gt;                 &lt; option value =&#34; John&#34;&gt; John&lt; / option&gt;                 &lt; option value =&#34; Joe&#34;&gt; Joe&lt; / option&gt;                 &lt; option value =&#34; Stephen&#34;&gt; Stephen&lt; / option&gt;                 &lt; option value =&#34; Mary&#34;&gt; Mary&lt; / option&gt;             &lt; / form:select&gt;         &LT; / TD&GT;         &LT; / TR&GT;     &LT; / C:的forEach&GT; &LT; / form:表单&GT; 然后在我的域对象&#39; someStuff&#39; 我定义了一个地图: 私有地图&lt; String,String&gt; tempNames; 公共地图&lt; String,String&gt; getTempNames(){     return tempNames; } public void setTempNames(Map&lt; String,String&gt; tempNames){     this.tempNames = tempNames; } 问题: 如果我从下拉列表中选择值并提交此表单,我可以在控制器中放置一个断点,并查看&#39; tempNames&#39;它具有所有正确的值,我可以处理和保存 - 这正是我所期望的 - 所以绑定工作方式...... 但是,如果&some;已经有值,这些值不受下拉列表的约束。 我试过了 添加&#39;值&#39;属性为元素本身,如: &lt; form:select id =&#34; name_for_thing _ $ {thisThing.SomeId}&#34; path =&#34; tempNames [&#39; $ {thisThing.SomeId}&#39;]&#34;值=&#34; tempNames [&#39; $ {thisThing.SomeId}&#39;]&#34; thisThingsId =&#34; $ {thisThing.SomeId}&#34;类=&#34; thing_name_selector_class&#34;&GT; 并且像这样: &lt; form:select id =&#34; name_for_thing _ $ {thisThing.SomeId}&#34; path =&#34; tempNames [&#39; $ {thisThing.SomeId}&#39;]&#34;值=&#34; $ {tempNames [thisThing.SomeId]}&#34; thisThingsId =&#34; $ {thisThing.SomeId}&#34;类=&#34; thing_name_selector_class&#34;&GT; 但是第二个似乎甚至没有出现在最终的HTML中....

1 个答案:

答案 0 :(得分:1)

我遇到过同样的问题。 似乎您必须自己计算RAX # inputs: RDI is a pointer to time_t that will be filled in # returns: result is left in RAX time: mov eax, 201 syscall ret 旗帜:

option

请注意selected无法正常工作。浏览器(至少Chrome)会忽略<form:select id="name_for_thing_${thisThing.SomeId}" path = "tempNames['${thisThing.SomeId}']" thisThingsId="${thisThing.SomeId}" class="thing_name_selector_class"> <option value="Please Select One">Please Select One</option> <c:choose> <c:when test="${tempNames['${thisThing.SomeId}'] == "John"}"> <option value="John" selected="true">John</option> </c:when> <c:otherwise> <option value="John">John</option> </c:otherwise> </c:choose> ... </form:select > 属性的内容,唯一重要的是属性本身的存在/缺失:<option selected="${tempNames['${thisThing.SomeId}'] == "John"}">仍然会选择该选项。