springmvc form:select 标签 map用法
2017-03-24 11:02
351 查看
在使用form:select 标签 时, itemValue和itemLabel属性怎么填都报错,如下,teacherTypes为Map
只好跟源码看看咋解决。
直接贴源码
form:select标签有springmvc框架组装html的select标签,里面需要把下拉选项的options标签也同时组装出来,有上面代码可以看出,针对map格式会有单独则组装方法,
继续看renderFromMap方法
可以看出,map类型会先迭代每个键值对,拿到 mapKey和mapValue,然后根据你在上面填入的itemLabel和itemValue值,将会在这个mapKey和mapValue是否含有上述属性,
假设取到的的mapValue为某个自定义类对象,而且定义了这个私有itemValue属性setter getter方法,那么ok,取到了这个自定义类对象的itemValue的属性值;
但是如果你没有定义这个私有itemValue属性setter getter方法 ,或者你这个对象根本就是基本类型(int、boolean等包含string),根本就没有自定义的属性,则会抛出找不到getter属性值的异常;
好了,说道这里,也知道为啥咋写都不对了,应该itemLabel和itemValue属性,全部不填,就ok了
是不是正确出来了?!!!!
<div class="form-group"> <form:label path="teacherTypeId">类型选择:</form:label> <form:select path="teacherTypeId" items="${teacherTypes}" itemValue="value"/> </div>
只好跟源码看看咋解决。
直接贴源码
package org.springframework.web.servlet.tags.form; import java.beans.PropertyEditor; import java.util.Collection; import java.util.Iterator; import java.util.Map; import java.util.Map.Entry; import javax.servlet.jsp.JspException; import org.springframework.beans.BeanWrapper; import org.springframework.beans.PropertyAccessorFactory; import org.springframework.util.Assert; import org.springframework.util.CollectionUtils; import org.springframework.web.servlet.support.BindStatus; import org.springframework.web.servlet.tags.form.SelectedValueComparator; import org.springframework.web.servlet.tags.form.TagWriter; import org.springframework.web.servlet.tags.form.ValueFormatter; class OptionWriter { public void writeOptions(TagWriter tagWriter) throws JspException { if(this.optionSource.getClass().isArray()) { this.renderFromArray(tagWriter); } else if(this.optionSource instanceof Collection) { this.renderFromCollection(tagWriter); } else if(this.optionSource instanceof Map) { this.renderFromMap(tagWriter); } else { if(!(this.optionSource instanceof Class) || !((Class)this.optionSource).isEnum()) { throw new JspException("Type [" + this.optionSource.getClass().getName() + "] is not valid for option items"); } this.renderFromEnum(tagWriter); } }
form:select标签有springmvc框架组装html的select标签,里面需要把下拉选项的options标签也同时组装出来,有上面代码可以看出,针对map格式会有单独则组装方法,
继续看renderFromMap方法
private void renderFromMap(TagWriter tagWriter) throws JspException { Map optionMap = (Map)this.optionSource; Iterator var3 = optionMap.entrySet().iterator(); while(var3.hasNext()) { Entry entry = (Entry)var3.next(); Object mapKey = entry.getKey(); Object mapValue = entry.getValue(); Object renderValue = this.valueProperty != null?PropertyAccessorFactory.forBeanPropertyAccess(mapKey).getPropertyValue(this.valueProperty):mapKey; Object renderLabel = this.labelProperty != null?PropertyAccessorFactory.forBeanPropertyAccess(mapValue).getPropertyValue(this.labelProperty):mapValue; this.renderOption(tagWriter, mapKey, renderValue, renderLabel); } }
可以看出,map类型会先迭代每个键值对,拿到 mapKey和mapValue,然后根据你在上面填入的itemLabel和itemValue值,将会在这个mapKey和mapValue是否含有上述属性,
假设取到的的mapValue为某个自定义类对象,而且定义了这个私有itemValue属性setter getter方法,那么ok,取到了这个自定义类对象的itemValue的属性值;
但是如果你没有定义这个私有itemValue属性setter getter方法 ,或者你这个对象根本就是基本类型(int、boolean等包含string),根本就没有自定义的属性,则会抛出找不到getter属性值的异常;
好了,说道这里,也知道为啥咋写都不对了,应该itemLabel和itemValue属性,全部不填,就ok了
<div class="form-group"> <form:label path="teacherTypeId">类型选择:</form:label> <form:select path="teacherTypeId" items="${teacherTypes}" /> </div>
是不是正确出来了?!!!!
相关文章推荐
- Spring-mvc.xml中mvc标签的用法总结
- SpringMVC<from:form>表单标签和<input>表单标签简介
- SpringMVC<from:form>表单标签
- SpringMVC<from:form>表单标签和<input>表单标签简介
- SpringMVC<from:form>表单标签和<input>表单标签简介
- NHibernate+spring.net+jquery打造UI控件库(mvc+webform两种实现) combox,shadow控件的初步实现(包括键盘,过滤功能)(附代码下载)
- NHibernate+spring.net+jquery打造UI控件库(mvc+webform两种实现) usercontrol,jtemplate两种方式打造无刷新分页(附NHbernate+Spring.net源码)
- jsp中<html:select>标签的用法
- struts2 中select标签的用法
- 关于struts2的checkboxlist、select等标签发生could not be resolved as a collection/array/map/enumeration/iterat
- input、select等Form标签对其问题
- Spring Web ,使用annotation和form标签库开发web应用(二)请求的映射
- SpringMVC—<mvc:annotation-driven/>标签
- struts2 中select标签的用法
- Struts 中 Html 标签库 的用法(第二组标签,与Form相关的标签 )
- struts2的select标签用法
- html:select 标签的基本用法
- 关于hibernate中set、list、map标签的用法与配置含义。
- struts2的select标签的用法
- c标签与choose标签在select标签中的用法