在实际应用中,我使用了struts2的模型驱动,下面是部分代码
public class UserTModel
{
private String userName;
private String password;
private Map roleMap=new HashMap();
         省略set/get方法}
我在Action中对roleMap做了初始设置如下
private UserTModel userT=new UserTModel();/**模型驱动**/
public String  initAddUser()
{
List roleList=roleService.getObjs(HqlBuilder.createQuery("Role"));
Map roleMap=new HashMap();
for(int i=0;i<roleList.size();i++)
{
Role role=(Role)roleList.get(i);
roleMap.put(role.getId(), role.getRoleTitle());
}
userT.setRoleMap(roleMap);
return "success";
}然后在页面中进行显示,结果是正常的
<s:form action="/usermanage/addUser.action" >
<table width="100%" border="1" align="center">
   <tr class="tr-gray-my">
       <td>
         <s:label value="用户登录名" cssStyle="font-size:12px" theme="simple"/>:<s:textfield  name="userT.userName" value="" theme="simple"/>
       </td>
   </tr>

   <tr class="tr-gray-my">
      <td style="font-size:12px"> <s:label value="登录密码" cssStyle="font-size:12px" theme="simple"/>:<s:password  name="userT.password" value="" theme="simple"></s:password>
      </td>
   </tr>
   <tr class="tr-gray-my">
      <td style="font-size:12px">
<s:label value="权限指定" cssStyle="font-size:12px" theme="simple"/>:<s:checkboxlist  name="userT.roleMap" list="userT.roleMap" listKey="key" listValue="value" value="" theme="simple"/>
      </td>
   </tr>
</table>
</s:form>现在的问题是,当我提交这个表单时 ,总是报
errors {userT.roleMap=[Invalid field value for field "userT.roleMap".]} ,这个如何解决啊?

解决方案 »

  1.   

    private Map roleMap=new HashMap(); 
    不应该使用map,  应该是 数组...
      

  2.   

    <s:checkboxlist  name="userT.roleMap" list="userT.roleMap" listKey="key" listValue="value" value="" theme="simple"/>问题出现在name="userT.roleMap"。因为:checkboxlist生成一组name="userT.roleMap"的checkbox,画面提交是按照String提交的,对象中是Map类型,所以报错。<s:checkboxlist />name属性必须再定义一个变量,类型可以是List<String>,String和String[]三种。
      

  3.   

    struts2好像有什么类型转换,不知道有没有用?