我向同事解释了如何通过使用索引here和here来获取从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中以将值附加到列表而不是覆盖它们。
任何人都可以详细解释这个“无指数”案件背后的问题吗?如何使用上面的代码段实例化和填充字符串列表?
答案 0 :(得分:1)
您应该了解bean数据而不是bean数据作为参数传递给操作。如果您实现ParameterAware
,则参数具有可以找到的结构。
请注意,将返回给定名称的所有参数值,因此 地图中对象的类型为
java.lang.String[]
。
然后,XWork Type Conversion会尽最大努力将此地图转换为bean属性。见Built in Type Conversion Support。
框架中的例行类型转换是透明的。通常, 您需要做的就是确保HTML输入具有可以的名称 用于OGNL表达式。 (HTML输入是表单元素和其他 GET / POST参数。)
在no索引中,case参数映射在一个键下,而不是索引名称在它们自己的名称下使用。
答案 1 :(得分:-1)
您必须在上面的代码中设置索引值
像
<input type="checkbox" name="contactNameList[0]" value="someValue1">