Struts 2.18 + Spring2.5 + Hibernate 3.2 applicationContent.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:aop="http://www.springframework.org/schema/aop"
    xmlns:jee="http://www.springframework.org/schema/jee"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-2.5.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd"
    default-lazy-init="true">
<!--数据源配置--><bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
              <property name="driverClassName">
                     <value>oracle.jdbc.driver.OracleDriver</value>
              </property>
              <property name="url">
 <value>jdbc:oracle:thin:@192.168.1.103:1521:think</value>
              </property>
              <property name="username">
                     <value>iDocer</value>
              </property>
              <property name="password">
                     <value>stuibm</value>
              </property>
              <property name="maxActive">
                     <value>255</value>
              </property>
              <property name="maxIdle">
                     <value>2</value>
              </property>
              <property name="maxWait">
                     <value>120000</value>
              </property>
       </bean>
       
       
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="configLocation"
value="classpath:hibernate.cfg.xml">
</property>

<property name="packagesToScan">
<list>
<value>com.idoc.**.model</value>
</list>
</property>

</bean>

<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>

<tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true" />

<!-- 使用annotation 自动注册bean,并检查@Required,@Autowired的属性已被注入 -->
<context:component-scan base-package="com.idoc,com.doc.*" />

<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource" />  
</bean> </beans>package com.idoc.common.dao;import java.io.Serializable;
import java.util.List;import org.hibernate.Query;
import org.hibernate.Session;
import org.springframework.orm.hibernate3.HibernateTemplate;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;/**
 * DAO基类
 * 
 * @author Administrator
 * 
 */
@Repository
public class BaseHibernateDao extends HibernateDaoSupport {
/**
 * 得到session
 * 
 * @return
 */
public Session findSession() {
return super.getSession();
} /**
 * 添加方法
 */
@Transactional
public void save(Object object) {
try {
super.getHibernateTemplate().save(object);
} catch (Exception ex) {
ex.printStackTrace();
}
} @Transactional
public void save(String name, Object object) {
try {
super.getHibernateTemplate().save(name, object);
} catch (Exception ex) {
ex.printStackTrace();
}
} /**
 * 删除方法
 */
@Transactional
public void delete(Object object) {
try {
super.getHibernateTemplate().delete(object);
} catch (Exception ex) {
ex.printStackTrace();
}
} @Transactional
public void delete(String name, Object object) {
try {
super.getHibernateTemplate().delete(name, object);
} catch (Exception ex) {
ex.printStackTrace();
}
} /**
 * 修改方法
 */
@Transactional
public void update(Object object) {
try {
Session session=this.getSession();
session.clear();
super.getHibernateTemplate().update(object);
} catch (Exception ex) {
ex.printStackTrace();
}
} @Transactional
public void update(String name, Object object) {
try {
super.getHibernateTemplate().update(name, object);
} catch (Exception ex) {
ex.printStackTrace();
}
} /**
 * 查询所有方法
 */
@SuppressWarnings("unchecked")
@Transactional(readOnly = true)
public <T> List<T> find(Class clazz) {
List<T> list = null;
try {
String hql = "from " + clazz.getName();
list = (List<T>) super.getHibernateTemplate().find(hql);
} catch (Exception ex) {
ex.printStackTrace();
}
return list;
} /**
 * 根据ID获得实体
 * 
 * @param <T>
 * @param clazz
 * @param id
 * @return
 */
@SuppressWarnings("unchecked")
@Transactional(readOnly = true)
public <T> T findById(Class<T> clazz, Serializable id) {
return (T) super.getHibernateTemplate().get(clazz, id);
} /**
 * 根据条件查询所有
 * 
 * @param <M>
 * @return
 */
@SuppressWarnings("unchecked")
@Transactional(readOnly = true)
public <T> List<T> find(String hql, Object[] values) {
if (values == null || values.length == 0) {
return super.getHibernateTemplate().find(hql);
} else {
return super.getHibernateTemplate().find(hql, values);
}
} public HibernateTemplate getTemplate() {
return super.getHibernateTemplate();
} @SuppressWarnings("unchecked")
public <T> List<T> que(String hql, int start, int max) {
Query query = this.getSession().createQuery(hql);
query.setFirstResult(start);
query.setMaxResults(max);
return query.list(); } @SuppressWarnings("unchecked")
public <T> List<T> que(String hql, int start) {
Query query = this.getSession().createQuery(hql); query.setFirstResult(start); return query.list(); }


}错误信息
HTTP Status 500 - --------------------------------------------------------------------------------type Exception reportmessage description The server encountered an internal error () that prevented it from fulfilling this request.exception Unable to instantiate Action, com.idoc.sysset.tree.webapp.TreeAction,  defined for 'getTree' in namespace '/'Error creating bean with name 'com.idoc.sysset.tree.webapp.TreeAction': Autowiring of fields failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: public com.idoc.sysset.office.service.TaxoService com.idoc.sysset.tree.webapp.TreeAction.taxoService; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'taxoService': Autowiring of methods failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire method: public void com.idoc.common.service.BaseManager.setDao(com.idoc.common.dao.BaseHibernateDao); nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'baseHibernateDao' defined in file [D:\DevelopmentProgrammes\apache-tomcat-6.0.20\webapps\iDocument\WEB-INF\classes\com\idoc\common\dao\BaseHibernateDao.class]: Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: 'sessionFactory' or 'hibernateTemplate' is required
com.opensymphony.xwork2.DefaultActionInvocation.createAction(DefaultActionInvocation.java:307)
com.opensymphony.xwork2.DefaultActionInvocation.init(DefaultActionInvocation.java:388)
com.opensymphony.xwork2.DefaultActionProxy.prepare(DefaultActionProxy.java:187)
org.apache.struts2.impl.StrutsActionProxy.prepare(StrutsActionProxy.java:61)
org.apache.struts2.impl.StrutsActionProxyFactory.createActionProxy(StrutsActionProxyFactory.java:39)
com.opensymphony.xwork2.DefaultActionProxyFactory.createActionProxy(DefaultActionProxyFactory.java:47)
org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:478)
org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77)
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:91)
org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:96)
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
root cause 

解决方案 »

  1.   

    Unable to instantiate Action, com.idoc.sysset.tree.webapp.TreeAction,?
    TreeAction注解怎么写的
      

  2.   

    TreeAction.javapackage com.idoc.sysset.tree.webapp;import java.io.BufferedWriter;
    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.OutputStream;
    import java.io.OutputStreamWriter;
    import java.util.ArrayList;
    import java.util.List;import org.hibernate.mapping.Array;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Controller;import com.googlecode.jsonplugin.annotations.JSON;
    import com.idoc.common.webapp.BaseAction;
    import com.idoc.sysset.leader.model.Leader;
    import com.idoc.sysset.leader.service.leaderManager;
    import com.idoc.sysset.office.model.Taxoffice;
    import com.idoc.sysset.office.service.TaxoService;
    import com.idoc.sysset.office.webapp.TaxoAction;@SuppressWarnings("serial")
    @Controller
    public class TreeAction extends BaseAction{
    @Autowired
    private TaxoService taxoService;
    @Autowired
    private leaderManager ledaerMageager;
    List<Taxoffice> ts=new ArrayList<Taxoffice>();
    @JSON(name="ts")
    public List<Taxoffice> getTs() {
    return ts;
    }
    public void setTs(List<Taxoffice> ts) {
    this.ts = ts;
    }
    //父类的方法 public String getTreeNode()
    {

    ts=this.taxoService.find();

    return "json";

    }

    //子类的方法  public void getTree() throws IOException
    {

    List<Taxoffice> ts=new ArrayList<Taxoffice>();
    List<Leader> ls=new ArrayList<Leader>();
    ts=this.taxoService.find();
    ls=this.ledaerMageager.find();
    String tB="[";
    List<Leader> lea;

    for(int i=0;i<ts.size();i++)
    {

    int code=ts.get(i).getCode();
    tB+="{";
    tB+="\"cls\":\"folder\",";
    tB+="\"id\":\""+ts.get(i).getCode()+"\",";
    tB+="\"text\":\""+ts.get(i).getName()+"\",";
         lea=this.ledaerMageager.getLeaders(code);
        
         if(lea.size()>0){
    tB+="\"leaf\":false,";
    tB+="\"children\":[";
           for(int y=0;y<lea.size();y++)
           {
       tB+="{";
       tB+="\"cls\":\"file\",";
    tB+="\"leaf\":true,";
    tB+="\"id\":\""+ls.get(y).getLeaderCode()+"\",";
    tB+="\"text\":\""+ls.get(y).getName()+"\"";
    if(y==(lea.size()-1)){
    tB+="}";
    }else{
    tB+="},";}
           }
         tB+="]"; 
         }else{
         tB+="\"leaf\":true";
         }
    if(i==(ts.size()-1)){
    tB+="}";
    }else{
    tB+="},";}
    }
    tB+="]";
    this.getResponse().getWriter().write(tB);
    this.getResponse().getWriter().close();
    //this.getResponse()
    //this.getResponse().getWriter().write(this.getRequest().getRealPath("/iDocument"));
    //this.getRequest().getRealPath("/iDocument");
    // try{
    //            File file=new   File("/iDocument/jj.jsp");  
    //            OutputStream out=new FileOutputStream(file);
    //            BufferedWriter   rd   =   new BufferedWriter(new OutputStreamWriter(out,"utf-8"));
    //            rd.write(tB);
    //            rd.close();
    //            out.close();
    //        }catch(IOException e){
    //            e.printStackTrace();
    //        }  }

    }
    struts-tree.xml<?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
        "http://struts.apache.org/dtds/struts-2.0.dtd">
        <!--Struts Start-->
        <struts>
         <package name="tree" extends="default"  namespace="/" >
         <action name="getTree" class="com.idoc.sysset.tree.webapp.TreeAction" method="getTree">
           <result name="json" type="json"></result>
         </action>
         </package>
        </struts>struts.xml
    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN"
        "http://struts.apache.org/dtds/struts-2.1.dtd">
        <struts>
         <!-- 国际化 ,用于AJAX -->
         <constant name="struts.i18n.encoding" value="UTF-8"></constant>
         <!-- struts对象由spring托管 -->
         <constant name="struts.objectFactory" value="spring"></constant>
         <!-- 根据name自动装配 -->
            <constant name="struts.objectFactory.spring.autoWire" value="name"></constant>
            <!-- 允许在ActionName中使用 / ,即支持对 */* 的识别 -->
         <constant name="struts.enable.SlashesInActionNames" value="true"></constant>
         <!-- 访问后缀更改为习惯的do,此处支持多配置,即value="do,action" -->
    <constant name="struts.action.extension" value="do"></constant>
    <!-- struts标签所使用的theme,默认为xhtml,这里使用simple -->
    <constant name="struts.ui.theme" value="simple"></constant>
         <package name="default" extends="struts-default">
         <!-- 增加result类型,支持json格式数据返回 -->
            <result-types>
                 <result-type name="json" class="org.apache.struts2.json.JSONResult"/>
             </result-types>
             <!-- json拦截器 --><!--
             <interceptors>
             <interceptor name="logs" class="com.idoc.sysset.syslog.webapp.MyInterceptor" />
                 <interceptor name="json" class="org.apache.struts2.json.JSONInterceptor"/>
                 <interceptor-stack name="defau">
                 <interceptor-ref name="defaultStack"/>
                 <interceptor-ref name="logs"/>
                 <interceptor-ref name="json"/>
                 </interceptor-stack>
             </interceptors>
             <default-interceptor-ref name="defau" />
         --></package>
         <include file="com/idoc/**/struts*.xml"></include>
        </struts>
      

  3.   

     Error creating bean with name 'taxoService': Autowiring of methods failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire method: public void com.idoc.common.service.BaseManager.setDao(com.idoc.common.dao.BaseHibernateDao); ?taxoService有错
      

  4.   

    package com.idoc.sysset.office.service;
    import java.util.ArrayList;
    import java.util.List;import org.springframework.stereotype.Service;
    import com.idoc.common.service.BaseManager;
    import com.idoc.sysset.office.model.Taxoffice;@Service
    public class TaxoService extends BaseManager<Taxoffice> {

    public List<Taxoffice> findoffices()
    {
    return this.find();
    }
         

    public  List<Taxoffice> getTaxoCode(String name)
    {

    String sql="from Taxoffice as t where t.name=?";
    return this.find(sql, new Object[]{name});



      
    }

    public List<Taxoffice> getAll(int start,int max){
    List<Taxoffice> list=new ArrayList<Taxoffice>();
    String hql=" from Taxoffice  ";
    list=this.getDao().que(hql, start, max);
    return list;
    };

    public List<Taxoffice> getTaxo(int code)
    {
    String sql="from Taxoffice as t where t.code=?";
    return this.find(sql,new Object[]{code});

    }
    }
      

  5.   

    BaseHibernateDao.javapackage com.idoc.common.dao;import java.io.Serializable;
    import java.util.List;import org.hibernate.Query;
    import org.hibernate.Session;
    import org.springframework.orm.hibernate3.HibernateTemplate;
    import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
    import org.springframework.stereotype.Repository;
    import org.springframework.transaction.annotation.Transactional;/**
     * DAO基类
     * 
     * @author Administrator
     * 
     */
    @Repository
    public class BaseHibernateDao extends HibernateDaoSupport {
    /**
     * 得到session
     * 
     * @return
     */
    public Session findSession() {
    return super.getSession();
    } /**
     * 添加方法
     */
    @Transactional
    public void save(Object object) {
    try {
    super.getHibernateTemplate().save(object);
    } catch (Exception ex) {
    ex.printStackTrace();
    }
    } @Transactional
    public void save(String name, Object object) {
    try {
    super.getHibernateTemplate().save(name, object);
    } catch (Exception ex) {
    ex.printStackTrace();
    }
    } /**
     * 删除方法
     */
    @Transactional
    public void delete(Object object) {
    try {
    super.getHibernateTemplate().delete(object);
    } catch (Exception ex) {
    ex.printStackTrace();
    }
    } @Transactional
    public void delete(String name, Object object) {
    try {
    super.getHibernateTemplate().delete(name, object);
    } catch (Exception ex) {
    ex.printStackTrace();
    }
    } /**
     * 修改方法
     */
    @Transactional
    public void update(Object object) {
    try {
    Session session=this.getSession();
    session.clear();
    super.getHibernateTemplate().update(object);
    } catch (Exception ex) {
    ex.printStackTrace();
    }
    } @Transactional
    public void update(String name, Object object) {
    try {
    super.getHibernateTemplate().update(name, object);
    } catch (Exception ex) {
    ex.printStackTrace();
    }
    } /**
     * 查询所有方法
     */
    @SuppressWarnings("unchecked")
    @Transactional(readOnly = true)
    public <T> List<T> find(Class clazz) {
    List<T> list = null;
    try {
    String hql = "from " + clazz.getName();
    list = (List<T>) super.getHibernateTemplate().find(hql);
    } catch (Exception ex) {
    ex.printStackTrace();
    }
    return list;
    } /**
     * 根据ID获得实体
     * 
     * @param <T>
     * @param clazz
     * @param id
     * @return
     */
    @SuppressWarnings("unchecked")
    @Transactional(readOnly = true)
    public <T> T findById(Class<T> clazz, Serializable id) {
    return (T) super.getHibernateTemplate().get(clazz, id);
    } /**
     * 根据条件查询所有
     * 
     * @param <M>
     * @return
     */
    @SuppressWarnings("unchecked")
    @Transactional(readOnly = true)
    public <T> List<T> find(String hql, Object[] values) {
    if (values == null || values.length == 0) {
    return super.getHibernateTemplate().find(hql);
    } else {
    return super.getHibernateTemplate().find(hql, values);
    }
    } public HibernateTemplate getTemplate() {
    return super.getHibernateTemplate();
    } @SuppressWarnings("unchecked")
    public <T> List<T> que(String hql, int start, int max) {
    Query query = this.getSession().createQuery(hql);
    query.setFirstResult(start);
    query.setMaxResults(max);
    return query.list(); } @SuppressWarnings("unchecked")
    public <T> List<T> que(String hql, int start) {
    Query query = this.getSession().createQuery(hql); query.setFirstResult(start); return query.list(); }


    }
      

  6.   

    去下个struts2官方文档
    里面有个
    Struts 2 + Spring 2 + JPA + AJAX例子
    很详细  对着参考下
      

  7.   

    Struts2/struts-2.1.6-docs/struts-2.1.6/docs/docs/tutorials.html
    下载之后  进这个页面
      

  8.   

    Autowiring of methods failed 写的很明白,在自动匹配注入的地方失败了。检查一下这个类的哪些属性没被设置上。
      

  9.   

     Could not autowire method: public void com.idoc.common.service.BaseManager.setDao的注解错误,题代码