model类:
org.appfuse.model.Newstype.javapackage org.appfuse.model;public class Newstype extends BaseObject{
/**
 * 
 */
private static final long serialVersionUID = 3771464295740918883L;
private Long id;
private Long parentid;
private String typename;
private Long typesenque;
private String typememo;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public Long getParentid() {
return parentid;
}
public void setParentid(Long parentid) {
this.parentid = parentid;
}
public String getTypememo() {
return typememo;
}
public void setTypememo(String typememo) {
this.typememo = typememo;
}
public String getTypename() {
return typename;
}
public void setTypename(String typename) {
this.typename = typename;
}
public Long getTypesenque() {
return typesenque;
}
public void setTypesenque(Long typesenque) {
this.typesenque = typesenque;
}}hibernate所需表映射文件
org.appfuse.model目录下
Newstype.hbm.xml
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE hibernate-mapping PUBLIC
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><hibernate-mapping>
    <class name="org.appfuse.model.Newstype" table="newstype">
        <id name="id" column="id" unsaved-value="null">
            <generator class="increment"/>
        </id>
        <property name="parentid" column="parenttypeid" not-null="true"/>
        <property name="typename" column="typename" not-null="true"/>
        <property name="typesenque" column="typesenque" not-null="true"/>
        <property name="typememo" column="typememo" not-null="true"/>
    </class>
</hibernate-mapping>数据库操作类及接口package org.appfuse.dao;
import org.appfuse.model.Newstype;
import java.util.List;
public interface NewstypeDAO extends DAO {
    public List getNewstypes();
    public Newstype getNewstype(Long typeId);
    public void saveNewstype(Newstype newstype);
    public void removeNewstype(Long typeId);
   
}接口实现类:
package org.appfuse.dao.hibernate;
import org.appfuse.dao.NewstypeDAO;
import org.appfuse.model.Newstype;
import org.springframework.orm.ObjectRetrievalFailureException;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import java.util.List;
/**
 * This class interacts with Spring and Hibernate to save and
 * retrieve Newstype objects.
 *
 * @author Matt Raible
 */
public class NewstypeDAOHibernate extends HibernateDaoSupport implements NewstypeDAO {    public List getNewstypes() {
        return getHibernateTemplate().find("from Newstype");
    }    public Newstype getNewstype(Long id) {
        Newstype Newstype = (Newstype) getHibernateTemplate().get(Newstype.class, id);
        if (Newstype == null) {
            throw new ObjectRetrievalFailureException(Newstype.class, id);
        }
        return Newstype;
    }    public void saveNewstype(Newstype Newstype) {
        getHibernateTemplate().saveOrUpdate(Newstype);        if (logger.isDebugEnabled()) {
            logger.debug("NewstypeId set to: " + Newstype.getId());
        }
    }    public void removeNewstype(Long id) {
        getHibernateTemplate().delete(getNewstype(id));
    }}

解决方案 »

  1.   

    业务类
    package org.appfuse.service;import org.appfuse.model.Newstype;import java.util.List;public interface NewstypeManager {
        public List getNewstypes();
        public Newstype getNewstype(String NewstypeId);
        public void saveNewstype(Newstype Newstype);
        public void removeNewstype(String NewstypeId);}
    业务类接口实现类
    package org.appfuse.service.impl;import org.appfuse.dao.NewstypeDAO;
    import org.appfuse.model.Newstype;import org.appfuse.service.NewstypeManager;import java.util.List;
    public class NewstypeManagerImpl implements NewstypeManager {
        private NewstypeDAO dao;    public void setNewstypeDAO(NewstypeDAO dao) {
            this.dao = dao;
        }    public List getNewstypes() {
            return dao.getNewstypes();
        }    public Newstype getNewstype(String NewstypeId) {
            return dao.getNewstype(Long.valueOf(NewstypeId));
        }    public void saveNewstype(Newstype Newstype) {
            dao.saveNewstype(Newstype);
        }    public void removeNewstype(String NewstypeId) {
            dao.removeNewstype(Long.valueOf(NewstypeId));
        }}控制器类:package org.appfuse.web;import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;import org.apache.commons.logging.Log;
    import org.apache.commons.logging.LogFactory;
    import org.appfuse.service.NewstypeManager;
    import org.springframework.web.servlet.ModelAndView;
    import org.springframework.web.servlet.mvc.Controller;public class NewstypeController implements Controller {
        private final Log log = LogFactory.getLog(NewstypeController.class);
        private NewstypeManager mgr = null;    public void setNewstypeManager(NewstypeManager NewstypeManager) {
            this.mgr = NewstypeManager;
        }    public ModelAndView handleRequest(HttpServletRequest request,
                                          HttpServletResponse response)
        throws Exception {
            if (log.isDebugEnabled()) {
                log.debug("entering 'handleRequest' method...");
            }        return new ModelAndView("newstypeList", "newstypes", mgr.getNewstypes());
        }
    }
    业务操作控制器类:
    package org.appfuse.web;import java.text.SimpleDateFormat;
    import java.util.Date;import javax.servlet.ServletException;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;import org.apache.commons.logging.Log;
    import org.apache.commons.logging.LogFactory;
    import org.appfuse.model.Newstype;
    import org.appfuse.service.NewstypeManager;
    import org.springframework.beans.propertyeditors.CustomDateEditor;
    import org.springframework.beans.propertyeditors.CustomNumberEditor;
    import org.springframework.validation.BindException;
    import org.springframework.web.bind.ServletRequestDataBinder;
    import org.springframework.web.servlet.ModelAndView;
    import org.springframework.web.servlet.mvc.SimpleFormController;public class NewstypeFormController extends SimpleFormController {
        private final Log log = LogFactory.getLog(NewstypeFormController.class);
        private NewstypeManager mgr = null;    public void setNewstypeManager(NewstypeManager NewstypeManager) {
            this.mgr = NewstypeManager;
        }
        
        public NewstypeFormController() {
            setCommandName("Newstype");
            setCommandClass(Newstype.class);
        }    public ModelAndView processFormSubmission(HttpServletRequest request,
                                                  HttpServletResponse response,
                                                  Object command,
                                                  BindException errors)
                throws Exception {
            if (request.getParameter("cancel") != null) {
                return new ModelAndView(getSuccessView());
            }        return super.processFormSubmission(request, response, command, errors);
        }    /**
         * Set up a custom property editor for converting Longs
         */
        protected void initBinder(HttpServletRequest request,
                                  ServletRequestDataBinder binder) {
            // convert java.util.Date
            SimpleDateFormat dateFormat = new SimpleDateFormat(getText("date.format"));
            dateFormat.setLenient(false);
            binder.registerCustomEditor(Date.class, null, 
                    new CustomDateEditor(dateFormat, true));
            
            // convert java.lang.Long
            binder.registerCustomEditor(Long.class, null,
                    new CustomNumberEditor(Long.class, null, true));
        }    public ModelAndView onSubmit(HttpServletRequest request,
                                     HttpServletResponse response, Object command,
                                     BindException errors)
                throws Exception {
            if (log.isDebugEnabled()) {
                log.debug("entering 'onSubmit' method...");
            }        Newstype Newstype = (Newstype) command;        if (request.getParameter("delete") != null) {
                mgr.removeNewstype(Newstype.getId().toString());
                request.getSession().setAttribute("message", 
                        getText("Newstype.deleted", Newstype.getTypename()));
            } else {
                mgr.saveNewstype(Newstype);
                request.getSession().setAttribute("message",
                        getText("Newstype.saved", Newstype.getTypename()));
            }        return new ModelAndView(getSuccessView());
        }    protected Object formBackingObject(HttpServletRequest request)
                throws ServletException {
            String NewstypeId = request.getParameter("id");        if ((NewstypeId != null) && !NewstypeId.equals("")) {
                return mgr.getNewstype(NewstypeId);
            } else {
                return new Newstype();
            }
        }
        
        /**
         * Convenience method for getting a i18n key's value.  Calling
         * getMessageSourceAccessor() is used because the RequestContext variable
         * is not set in unit tests b/c there's no DispatchServlet Request.
         *
         * @param msgKey
         * @return
         */
        public String getText(String msgKey) {
            return getMessageSourceAccessor().getMessage(msgKey);
        }    /**
         * Convenient method for getting a i18n key's value with a single
         * string argument.
         *
         * @param msgKey
         * @param arg
         * @return
         */
        public String getText(String msgKey, String arg) {
            return getText(msgKey, new Object[] { arg });
        }    /**
         * Convenience method for getting a i18n key's value with arguments.
         *
         * @param msgKey
         * @param args
         * @return
         */
        public String getText(String msgKey, Object[] args) {
            return getMessageSourceAccessor().getMessage(msgKey, args);
        }
    }
      

  2.   

    spring及hibernate所需的XML配置文件
    action-servlet.xml
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
        "http://www.springframework.org/dtd/spring-beans.dtd"><beans>
        <bean id="exceptionResolver" 
            class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
            <property name="exceptionMappings">
                <props>
                    <prop key="org.springframework.dao.DataAccessException">        
                        dataAccessFailure
                    </prop>
                </props>
            </property>
        </bean>    <bean id="userController" class="org.appfuse.web.UserController">
            <property name="userManager" ref="userManager"/>
        </bean>    <bean id="userFormController" class="org.appfuse.web.UserFormController">
            <property name="validator" ref="beanValidator"/>
            <property name="formView" value="userForm"/>
            <property name="successView" value="redirect:users.html"/>
            <property name="userManager" ref="userManager"/>
        </bean>
        <bean id="LoginAction" class="org.appfuse.web.LoginAction">
            <property name="fail_view" value="loginfail"/>
            <property name="success_view" value="main"/>
            <property name="userManager" ref="userManager"/>
        </bean>
        <!--add new control-->
        <bean id="newstypeController" class="org.appfuse.web.NewstypeController">
            <property name="newstypeManager" ref="newstypeManager"/>
        </bean>    <bean id="newstypeFormController" class="org.appfuse.web.NewstypeFormController">
            <property name="validator" ref="beanValidator"/>
            <property name="formView" value="newstypeForm"/>
            <property name="successView" value="redirect:newstypes.html"/>
            <property name="newstypeManager" ref="newstypeManager"/>
        </bean>
        <bean id="filenameController" class="org.springframework.web.servlet.mvc.UrlFilenameViewController"/>    <!-- View Resolver for JSPs -->
        <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
            <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
            <property name="prefix" value="/"/>
            <property name="suffix" value=".jsp"/>
        </bean>
        
        <bean id="urlMapping" 
            class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
            <property name="mappings">
                <value>
                    /users.html=userController
                    /editUser.html=userFormController
                    /login.html=LoginAction
                    /newstypes.html=newstypeController
                    /editNewstype.html=newstypeFormController
                </value>
            </property>
        </bean>    <bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
            <property name="basename" value="messages"/>
        </bean>    <bean id="beanValidator" class="org.springmodules.commons.validator.DefaultBeanValidator">
            <property name="validatorFactory" ref="validatorFactory"/>
        </bean>
    </beans>
    applicationContext-hibernate.xml<?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
        "http://www.springframework.org/dtd/spring-beans.dtd"><beans>   
        <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
            <property name="driverClassName" value="${jdbc.driverClassName}"/>
            <property name="url" value="${jdbc.url}"/>
            <property name="username" value="${jdbc.username}"/>
            <property name="password" value="${jdbc.password}"/>
            <property name="maxActive" value="30"/>
            <property name="maxIdle" value="10"/>
            <property name="maxWait" value="1000"/>
            <property name="defaultAutoCommit" value="true"/>
        </bean>    <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
            <property name="dataSource" ref="dataSource"/>
            <property name="mappingResources">
                <list>
                    <value>org/appfuse/model/User.hbm.xml</value>
                </list>
            </property>
            <property name="hibernateProperties">
                <props>
                    <prop key="hibernate.dialect">org.hibernate.dialect.SQLServerDialect</prop>
                    <prop key="hibernate.hbm2ddl.auto">update</prop>
                </props>
            </property>
        </bean>    <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
            <property name="sessionFactory" ref="sessionFactory"/>
        </bean>    <bean id="userDAO" class="org.appfuse.dao.hibernate.UserDAOHibernate">
            <property name="sessionFactory" ref="sessionFactory"/>
        </bean>
        <bean id="newstypeDAO" class="org.appfuse.dao.hibernate.NewstypeDAOHibernate">
            <property name="sessionFactory" ref="sessionFactory"/>
        </bean>
    </beans>applicationContext-validation.xml
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
        "http://www.springframework.org/dtd/spring-beans.dtd"><beans>
        <bean id="validatorFactory" class="org.springmodules.commons.validator.DefaultValidatorFactory">
            <property name="validationConfigLocations">
                <list>
                    <value>/WEB-INF/validation.xml</value>
                    <value>/WEB-INF/validator-rules.xml</value>
                </list>
            </property>
        </bean>
    </beans>applicationContext.xml<?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
        "http://www.springframework.org/dtd/spring-beans.dtd"><beans>
        <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
            <property name="location" value="classpath:jdbc.properties"/>
        </bean>    <!-- Transaction template for Managers, from:
             http://blog.exis.com/colin/archives/2004/07/31/concise-transaction-definitions-spring-11/ -->
        <bean id="txProxyTemplate" abstract="true"
            class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
            <property name="transactionManager"><ref bean="transactionManager"/></property>
            <property name="transactionAttributes">
                <props>
                    <prop key="save*">PROPAGATION_REQUIRED</prop>
                    <prop key="remove*">PROPAGATION_REQUIRED</prop>
                    <prop key="*">PROPAGATION_REQUIRED,readOnly</prop>
                </props>
            </property>
        </bean>    <bean id="userManager" parent="txProxyTemplate">
            <property name="target">
                <bean class="org.appfuse.service.impl.UserManagerImpl">
                    <property name="userDAO" ref="userDAO"/>
                </bean>
            </property>
        </bean>
     <bean id="newstypeManager" parent="txProxyTemplate">
            <property name="target">
                <bean class="org.appfuse.service.impl.NewstypeManagerImpl">
                    <property name="newstypeDAO" ref="newstypeDAO"/>
                </bean>
            </property>
        </bean>
    </beans>
      

  3.   

    有高手如果有问题我描述不够清楚的,就加我MSN:[email protected]吧,在线等
      

  4.   

    晕,找到答案了,当我把问题描述清楚后,再参照一下步骤,才发现一个关于hibernate的applicationContext-hibernate.XML文件没有配置<value>org/appfuse/model/Newstype.hbm.xml</value>
    所以找不到,
      

  5.   

    我想知道Equinox在哪下载,谢谢