我正在向一位同事解释如何使用说明的索引从JSP页面获取列表数据并返回到操作类的方法。他不太了解,自己摸索了一下,直到他突然间完全不使用索引使它起作用了!
在他的JSP页面中,他有:
<input type="checkbox" name="contactNameList" value="someValue1"> <input type="checkbox" name="contactNameList" value="someValue2"> <input type="checkbox" name="contactNameList" value="someValue3"> <input type="checkbox" name="contactNameList" value="someValue4">
在他的动作课上,他遇到了一些“合适的”设置者:
public List<String> getContactNameList() public void setContactNameList(List<String> list)
我对为什么这项工作感到困惑。我 认为 这可行,因为他正在发送非bean数据(在这种情况下为字符串),并且Struts2 / OGNL中内置了智能功能,可以将值附加到列表中而不是覆盖它们。
在这种“没有索引”的情况下,谁能详细解释背后的秘密?如何使用上面的片段实例化并填充字符串列表?
您应该理解,bean数据而不是bean数据作为参数传递给操作。如果实现,这些参数具有可以找到的结构ParameterAware。
ParameterAware
请注意,将返回给定名称的所有参数值,因此映射中的对象类型为java.lang.String[]。
java.lang.String[]
然后,XWork Type Conversion会尽最大努力将此映射转换为bean属性。请参阅内置类型转换支持。
框架中的常规类型转换是透明的。通常,您要做的就是确保HTML输入具有可在OGNL表达式中使用的名称。(HTML输入是表单元素和其他GET / POST参数。)
在无索引的情况下,参数被映射在一个键下,而不是在其自己的名称下使用索引名称。