首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java Web开发 >

struts1类型转换错误!

2012-05-08 
求救struts1类型转换异常!!!!!!!!!!!异常提示为:javax.servlet.ServletException: BeanUtils.populateorg.

求救struts1类型转换异常!!!!!!!!!!!
异常提示为:

javax.servlet.ServletException: BeanUtils.populate
org.apache.struts.util.RequestUtils.populate(RequestUtils.java:469)
org.apache.struts.action.RequestProcessor.processPopulate(RequestProcessor.java:818)
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:194)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1913)
org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:462)
javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
com.linhao.web.filter.SetCodeFilter.doFilter(SetCodeFilter.java:39)
org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter.doFilterInternal(OpenEntityManagerInViewFilter.java:112)
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)


root cause 

java.lang.IllegalArgumentException: array element type mismatch
java.lang.reflect.Array.set(Native Method)
org.apache.commons.beanutils.ConvertUtilsBean.convert(ConvertUtilsBean.java:464)
org.apache.commons.beanutils.BeanUtilsBean.setProperty(BeanUtilsBean.java:986)
org.apache.commons.beanutils.BeanUtilsBean.populate(BeanUtilsBean.java:811)
org.apache.commons.beanutils.BeanUtils.populate(BeanUtils.java:298)
org.apache.struts.util.RequestUtils.populate(RequestUtils.java:467)
org.apache.struts.action.RequestProcessor.processPopulate(RequestProcessor.java:818)
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:194)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1913)
org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:462)
javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
com.linhao.web.filter.SetCodeFilter.doFilter(SetCodeFilter.java:39)
org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter.doFilterInternal(OpenEntityManagerInViewFilter.java:112)
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)

//BaseForm 继承了 ActionForm了 下面是formbean:
public class PrivilegeGroupForm extends BaseForm {
private String name;
private SystemPrivilegePK[] privileges;

public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public SystemPrivilegePK[] getPrivileges() {
return privileges;
}
public void setPrivileges(SystemPrivilegePK[] privileges) {
System.out.println("before set privileges....");
this.privileges = privileges;
System.out.println("after set privileges....");
}
}
下面是jsp表单:
<html:form action="/control/privilegegroup/manage" method="post" onsubmit="return checkfm(this)">
<input type="hidden" name="method" value="add">
  <table width="90%" border="0" cellspacing="2" cellpadding="3" align="center">
  <tr bgcolor="6f8ac4"><td colspan="2" > <font color="#FFFFFF">添加权限组:</font></td>
  </tr>
  <tr bgcolor="f5f5f5"> 
  <td width="22%" > <div align="right">权限组名称:</div></td>
  <td width="78%"> <html:text property="name" size="20" maxlength="20"/>
  <font color="#FF0000">*</font></td>
  </tr>
  <tr bgcolor="f5f5f5"> 
  <td width="22%" > <div align="right">选择权限:</div></td>
  <td width="78%"> <c:forEach items="${privileges}" var="privilege" varStatus="statu">


<input type="checkbox" name="privileges" value="${privilege.id.module},${privilege.id.privilege}">
${privilege.name} <c:if test="${statu.count%4==0}"><br></c:if>
</c:forEach></td>
  </tr>
  <tr bgcolor="f5f5f5"> 
  <td colspan="2"> <div align="center"> 
  <input type="submit" name="SYS_SET" value=" 确 定 " class="frm_btn">
  </div></td>
  </tr>
  </table>
</html:form>
下面是类型转换器 :
public class SystemPrivilegePKConverter implements Converter{

@SuppressWarnings("unchecked")
public Object convert(Class clazz, Object value) {
if(clazz==String.class){
SystemPrivilegePK id = (SystemPrivilegePK) value;
return id.getModule()+","+ id.getPrivilege();
}
if(clazz==SystemPrivilegePK.class){
try{
String idstr = (String)value;
String[] ids = idstr.split(",");
if(ids.length==2){
return new SystemPrivilegePK(ids[0], ids[1]);
}
}catch (Exception e) {}
}
return null;
}
}
在过滤器也注册了这个转换器:
ConvertUtils.register(new SystemPrivilegePKConverter(), SystemPrivilegePKConverter.class);


求前辈指点迷津了。。。。




[解决办法]
数组元素类型不匹配

热点排行