论坛首页 Java企业应用论坛

求助:《webweork2 开发指南》 webwork2.2.4+spring 2.0 + hibernate 3.x

浏览 5704 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2006-10-12  
参考《webweork2 开发指南》 webwork2.2.4+spring 2.0 + hibernate 3.x 的demo遇到了如下问题,一时解决不了,达人帮我看一下吧,:

08:48:57,671 ERROR ServletDispatcher[serviceAction]:281 - Could not execute action
java.lang.NullPointerException
	at webworkspring.LoginAction.execute(LoginAction.java:14)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.lang.reflect.Method.invoke(Unknown Source)
	at com.opensymphony.xwork.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:364)
	at com.opensymphony.xwork.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:216)
	at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190)
	at com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:31)
	at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:188)
	at com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:31)
	at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:188)
	at com.opensymphony.xwork.DefaultActionProxy.execute(DefaultActionProxy.java:113)
	at com.opensymphony.webwork.dispatcher.ServletDispatcher.serviceAction(ServletDispatcher.java:272)
	at com.opensymphony.webwork.dispatcher.ServletDispatcher.service(ServletDispatcher.java:237)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
	at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664)
	at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
	at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
	at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
	at java.lang.Thread.run(Unknown Source)







package webworkspring;

import java.util.ArrayList;
import java.util.List;
/**
 * @hibernate.class table="user"
 */
public class LoginInfo {
	private Long id;
	private String password;
	private String username;
	
	private List messages = new ArrayList();	
	private String errorMessage;
	
	public List getMessages() {
	return messages;
	}
	public String getErrorMessage() {
	return errorMessage;
	}
	public void setErrorMessage(String errorMessage) {
	this.errorMessage = errorMessage;
	}
	/**
	 * @hibernate.property column="password"
	 * @return
	 */
	public String getPassword() {
	return password;
	}
	public void setPassword(String password) {
	this.password = password;
	}
	/**
	 * @hibernate.property column="username"
	 * @return
	 */
	public String getUsername() {
	return username;
	}
	public void setUsername(String username) {
	this.username = username;
	}
	/**
	 * @hibernate.id generator-class="native" column="id"	
	 * @return
	 */
	public Long getId() {
		return id;
	}
	public void setId(Long id) {
		this.id = id;
	}
}



package webworkspring;

public interface UserDAO {
	public abstract boolean isValidUser(String username);
}


package webworkspring;

import java.util.List;
//import org.hibernate.SessionFactory;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

public class UserDAOImp extends HibernateDaoSupport  implements  UserDAO {
	//private SessionFactory sessionFactory;
	private static String hql = "from LoginInfo u where u.username=? ";
	public boolean isValidUser(String username) {
		List userList = this.getHibernateTemplate().find(hql,username);//出于演示的简洁性考虑,这里并没有校验密码
		if (userList!=null  &&  userList.size() > 0) {
			return true;
		}
		return false;
	}
}


package webworkspring;

import java.util.Map;

import com.opensymphony.xwork.Action;
import com.opensymphony.xwork.ActionContext;
import com.opensymphony.xwork.ModelDriven;

public class LoginAction implements Action, ModelDriven {
	
	LoginInfo loginInfo = new LoginInfo();	
	private UserDAO userDAO;	
	public String execute() throws Exception {
		if (userDAO.isValidUser(loginInfo.getUsername())) {
			return SUCCESS;
		} 
		return ERROR;
		
	}
	
	public UserDAO getUserDAO() {
	return userDAO;
	}
	
	public void setUserDAO(UserDAO userDAO) {
		this.userDAO = userDAO;
	}
	
	public Object getModel() {
		return loginInfo;
	}
}



xwork.xml
<!DOCTYPE xwork PUBLIC "-//OpenSymphony Group//XWork 1.0//EN"
"http://www.opensymphony.com/xwork/xwork-1.0.dtd">
<xwork>

	<include file="webwork-default.xml" />
	
	<package name="default" extends="webwork-default">
		<action name="login" class="webworkspring.LoginAction">
			<result name="success" type="dispatcher"><param name="location">/pages/main.jsp</param></result>
			<result name="loginfail" type="dispatcher"><param name="location">/pages/index.jsp</param></result>
			<interceptor-ref name="model-driven"/>
			<interceptor-ref name="params" />			
		</action>
	</package>

</xwork>





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>

	<description>Spring Quick Start</description>
	
	<bean id="upperAction" class="springtest.UpperAction">
		<property name="message"><value>您好! </value></property>
	</bean>	
	
<!-- 第二个例子-->	
	<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
		<property name="driverClassName"><value>org.gjt.mm.mysql.Driver</value></property>
		<property name="url"><value>jdbc:mysql://localhost:3306/webworkspring?characterEncoding=utf-8</value></property>
		<property name="username"><value>root</value></property>
		<property name="password"><value>root</value></property>
	</bean>
	
	<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
		<property name="dataSource"><ref local="dataSource"/></property>
		<property name="mappingResources">
			<list>
				<value>webworkspring/LoginInfo.hbm.xml</value>
			</list>
		</property>
		<property name="hibernateProperties">
			<props>
				<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
				<prop key="hibernate.show_sql">true</prop>				
			</props>
		</property>
		<!-- 这里没有将hibernate的所有配置拿近来是为了另外的应用的方便,而且只把spring需要的拿近来是很合理的-->
	</bean>	
	
	<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
		<property name="sessionFactory"><ref local="sessionFactory"/></property>
	</bean>
	
	<bean id="userDAOProxy" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
		<property name="transactionManager"><ref bean="transactionManager" /></property>
		<property name="target"><ref local="userDAO" /></property>
		<property name="transactionAttributes">
			<props>
			<prop key="insert*">PROPAGATION_REQUIRED</prop>
			<prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>
			<prop key="is*">PROPAGATION_REQUIRED,readOnly</prop>
			</props>
		</property>
	</bean>

	<bean id="userDAO" class="webworkspring.UserDAOImp">
		<property name="sessionFactory"><ref local="sessionFactory" /></property>
	</bean>
	

	
	
</beans>





LoginInfo.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="webworkspring.LoginInfo"
        table="user"
    >

        <id
            name="id"
            column="id"
            type="java.lang.Long"
        >
            <generator class="uuid">
              <!--  
                  To add non XDoclet generator parameters, create a file named 
                  hibernate-generator-params-LoginInfo.xml 
                  containing the additional parameters and place it in your merge dir. 
              --> 
            </generator>
        </id>

        <property
            name="password"
            type="java.lang.String"
            update="true"
            insert="true"
            column="password"
        />

        <property
            name="username"
            type="java.lang.String"
            update="true"
            insert="true"
            column="username"
        />

        <!--
            To add non XDoclet property mappings, create a file named
                hibernate-properties-LoginInfo.xml
            containing the additional properties and place it in your merge dir.
        -->

    </class>

</hibernate-mapping>



   发表时间:2006-10-12  
检查一下是不是loginAction中没有注入UserDao.
0 请登录后投票
   发表时间:2006-10-12  
zidoing 写道
检查一下是不是loginAction中没有注入UserDao.



的确是主页的 debug时userDAO是空的,请问应该怎么改呢?是LoginAction.java 需要改 , 还是spring的配置文件?
0 请登录后投票
   发表时间:2006-10-12  
修改xwork.xml


	<package name="default" extends="webwork-default" abstract="true"
        externalReferenceResolver="com.atlassian.xwork.ext.SpringServletContextReferenceResolver" >	

        <interceptors>
            <interceptor name="reference-resolver" 
                         class="com.opensymphony.xwork.interceptor.ExternalReferencesInterceptor"/>

0 请登录后投票
   发表时间:2006-10-12  
xwork.properties中写了webwork.objectFactory = spring吗?
0 请登录后投票
   发表时间:2006-10-12  
参考:
http://wiki.javascud.org/display/ww2cndoc/Spring
0 请登录后投票
   发表时间:2006-10-12  
知道原因了,谢谢各位,等会我调式好了,再发正确的配置文件。
1.webwork和spring没有接起来,
2.webwork针对dao的拦截器没有配置
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics