2013-07-21 34 views
1

我在使用帶有休眠功能的Struts 1。struts 1中的多對多休眠1:非法參數異常

java.lang.IllegalArgumentException: argument type mismatch 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
at java.lang.reflect.Method.invoke(Method.java:597) 
at org.apache.commons.beanutils.PropertyUtilsBean.invokeMethod(PropertyUtilsBean.java:1776) 
at org.apache.commons.beanutils.PropertyUtilsBean.setSimpleProperty(PropertyUtilsBean.java:1762) 
at org.apache.commons.beanutils.PropertyUtilsBean.setNestedProperty(PropertyUtilsBean.java:1651) 
at org.apache.commons.beanutils.PropertyUtilsBean.setProperty(PropertyUtilsBean.java:1680) 
at org.apache.commons.beanutils.BeanUtilsBean.setProperty(BeanUtilsBean.java:1039) 
at org.apache.commons.beanutils.BeanUtilsBean.populate(BeanUtilsBean.java:811) 
at org.apache.commons.beanutils.BeanUtils.populate(BeanUtils.java:298) 
at org.apache.struts.util.RequestUtils.populate(RequestUtils.java:493) 
at org.apache.struts.action.RequestProcessor.processPopulate(RequestProcessor.java:796) 
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:203) 
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1192) 
at org.broker.web.CustomizedActionServlet.process(CustomizedActionServlet.java:522) 
at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:430) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:709) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:237) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157) 
at org.broker.web.UnicodeFilter.doFilter(UnicodeFilter.java:28) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:186) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157) 
at org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:198) 
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:186) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157) 
at org.broker.web.MessageFilter.doFilter(MessageFilter.java:36) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:186) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157) 
at org.broker.util.GZIPFilter.doFilter(GZIPFilter.java:19) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:186) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157) 
at org.securityfilter.filter.SecurityFilter.doFilter(SecurityFilter.java:189) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:186) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157) 
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:214) 
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104) 
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520) 
at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:198) 
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:152) 
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104) 
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520) 
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:137) 
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104) 
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:118) 
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102) 
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520) 
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) 
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104) 
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520) 
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:929) 
at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:160) 
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:799) 
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:705) 
at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:577) 
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:683) 
at java.lang.Thread.run(Thread.java:662) 

我除了在的.hbm.xml: 增加了許多對我的休眠實體一對多的關係,保存不會與此錯誤後工作

<set name="customerGroupsForReport" table="APPUSER_CUSTOMER_GROUP_REPORT" 
     inverse="false" lazy="true" fetch="select" cascade="all" > 
     <key> 
      <column name="APPUSER_ID" not-null="true" /> 
     </key> 
     <many-to-many entity-name="org.broker.model.CustomerGroup"> 
      <column name="CUSTOMER_GROUP_ID" not-null="true" /> 
     </many-to-many> 
    </set> 

中的.java實體

private Set <CustomerGroup> customerGroupsForReport = new HashSet<CustomerGroup>(0); 
    public Set<CustomerGroup> getCustomerGroupsForReport() { 
     return customerGroupsForReport; 
    } 

    public void setCustomerGroupsForReport(Set<CustomerGroup> customerGroupsForReport) { 
     this.customerGroupsForReport = customerGroupsForReport; 
    } 

以.jsp:

<html:select property="appUser.customerGroupsForReport" multiple="true"> 
       <html:options collection="customerGroups" labelProperty="customerGroupName" property="customerGroupId"/> 
      </html:select> 

in action class:

 request.setAttribute("customerGroups", manager.findObjects(CustomerGroup.class,"customerGroupName")); 

我的問題在哪裏?

+0

它看起來像是有請求參數「appUser.customerGroupsForReport」的綁定問題到您的ActionForm中的相應屬性...你能展示你的ActionForm – harrybvp

+0

我正在使用DynaActionForm –

回答

1

由於使用的是多選擇下拉菜單中,
假設customerGroupId是數字和用戶已經選擇了圖1和2 customerGroupId
appUser.customerGroupsForReport參數將作爲
appUser.customerGroupsForReport傳遞= 1
appUser.customerGroupsForReport = 2

考慮上面,我建議你將「customerGroupsForReport」屬性綁定到DynaActionForm配置中的數組長[](如果您的customerGroupId很長)
然後轉換回您的Action類中的Set。

+0

你的理由是什麼?有沒有來自struts的文件? –

+0

我剛剛更新了我的回答 – harrybvp

+0

有沒有任何休眠解決方案? –