小弟这几天用 struts2 + spring + ibatis 搭了一个程序。能进入登陆界面,登陆后我用 debug 看了,action 能正常运行,并返回 success(or error)。但是页面上却显示type Status reportmessage No result defined for action login.action.LoginAction and result successdescription The requested resource (No result defined for action login.action.LoginAction and result success) is not available.
我找了几天也没找出问题,麻烦各位大牛帮忙看看。下边是代码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>
<include file="struts-default.xml"></include>

<package name="default" extends="struts-default">

<action name="login" class="loginAction">
<result name="success" type="redirect">queryPerson</result>
<result name="error">/error.jsp</result>
</action>

<action name="queryPerson" class="personAction">
<result name="success">/personList.jsp</result>
<result name="error">/error.jsp</result>
</action>
</package></struts>
applicationContext-comm.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:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName">
<value>com.mysql.jdbc.Driver</value>
</property>
<property name="url">
<value>jdbc:mysql://127.0.0.1:3306/test</value>
</property>
<property name="username">
<value>root</value>
</property>
<property name="password">
<value>root</value>
</property>
</bean>

<bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
<property name="dataSource">
<ref local="dataSource"/>
</property>
<property name="configLocations">
<value>classpath:sqlMapConfig.xml</value>
</property>
</bean></beans>
applicationContext-action.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:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"> <bean id="loginAction" class="login.action.LoginAction">
<property name="loginService">
<ref bean="loginService"/>
</property>
</bean>

<bean id="personAction" class="login.action.PersonAction">
<property name="personService">
<ref bean="personService"/>
</property>
</bean>

</beans>
applicationContext-dao.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:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
<bean id="userDao" class="login.dao.impl.UserDaoImpl">
<property name="sqlMapClient">
<ref bean="sqlMapClient"/>
</property>
</bean>

<bean id="personDao" class="login.dao.impl.PersonDaoImpl">
<property name="sqlMapClient">
<ref bean="sqlMapClient"/>
</property>
</bean></beans>
applicationContext-service.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:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"> <bean id="loginService" class="login.service.impl.LoginServiceImpl">
<property name="userDao">
<ref bean="userDao"/>
</property>
</bean>

<bean id="personService" class="login.service.impl.PersonServiceImpl">
<property name="personDao">
<ref bean="personDao"/>
</property>
</bean>

</beans>
sqlMapConfig.xml<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMapConfig      
    PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN"      
    "http://ibatis.apache.org/dtd/sql-map-config-2.dtd">
    
<sqlMapConfig> <settings cacheModelsEnabled="true"
enhancementEnabled="true"
lazyLoadingEnabled="true"
useStatementNamespaces="true"
maxRequests="10" maxSessions="3"/>

<sqlMap resource="login/ibatis/User.xml"/>
<sqlMap resource="login/ibatis/Person.xml"/></sqlMapConfig>
login/ibatis/User.xml<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMap      
    PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"      
    "http://ibatis.apache.org/dtd/sql-map-2.dtd">
    
<sqlMap namespace="user"> <typeAlias alias="user" type="login.vo.User"/>

<select id="queryPassword" resultClass="java.lang.String">
SELECT password FROM user WHERE userName = #userName#
</select></sqlMap>
login/ibatis/Person.xml<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMap      
    PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"      
    "http://ibatis.apache.org/dtd/sql-map-2.dtd">
    
<sqlMap namespace="person"> <typeAlias alias="person" type="login.vo.Person"/>

<select id="queryPersonList" resultClass="person">
SELECT * FROM person
</select></sqlMap>

解决方案 »

  1.   

    login/action/LoginAction.javapackage login.action;import org.apache.log4j.Logger;import login.service.LoginService;
    import login.vo.User;import com.opensymphony.xwork2.ActionSupport;public class LoginAction extends ActionSupport {

    /**
     * 
     */
    private static final long serialVersionUID = 1L;

    private static Logger logger = Logger.getLogger(LoginAction.class); private LoginService loginService;

    private User user; @Override
    public String execute() {

    if(null == user) {
    this.addActionError("未知异常");
    return ERROR;
    }

    try {
    boolean isLogin = loginService.login(user);

    if(!isLogin) {
    return ERROR;
    }

    return SUCCESS;

    } catch (Exception e) {
    logger.error(e);
    this.addActionError("登陆失败");
    return ERROR;
    }
    } public LoginService getLoginService() {
    return loginService;
    } public void setLoginService(LoginService loginService) {
    this.loginService = loginService;
    } public User getUser() {
    return user;
    } public void setUser(User user) {
    this.user = user;
    }

    }login/action/PersonAction.javapackage login.action;import java.util.List;import login.service.PersonService;
    import login.vo.Person;import org.apache.log4j.Logger;import com.opensymphony.xwork2.ActionSupport;@SuppressWarnings("serial")
    public class PersonAction extends ActionSupport {

    private static Logger logger = Logger.getLogger(PersonAction.class);

    private PersonService personService;

    private List<Person> list; @Override
    public String execute() {

    try {
    list = personService.queryPersonList();

    return SUCCESS;

    } catch (Exception e) {
    logger.error(e);
    this.addActionError("查询失败");
    return ERROR;
    }

    } public PersonService getPersonService() {
    return personService;
    } public void setPersonService(PersonService personService) {
    this.personService = personService;
    } public List<Person> getList() {
    return list;
    } public void setList(List<Person> list) {
    this.list = list;
    }

    }
    login/dao/PersonDao.javapackage login.dao;import java.util.List;import login.vo.Person;public interface PersonDao {

    public List<Person> queryPersonList() throws Exception;}
    login/dao/UserDao.javapackage login.dao;public interface UserDao {

    public String queryPassword(String userName) throws Exception;}
    login/dao/impl/PersonDaoImpl.javapackage login.dao.impl;import java.util.List;import login.dao.PersonDao;
    import login.vo.Person;import org.springframework.orm.ibatis.support.SqlMapClientDaoSupport;public class PersonDaoImpl extends SqlMapClientDaoSupport implements PersonDao { @SuppressWarnings("unchecked")
    public List<Person> queryPersonList() throws Exception {
    try {
    return this.getSqlMapClientTemplate().queryForList("person.queryPersonList");
    } catch(Exception e) {
    throw e;
    }
    }}
    login/dao/impl/UserDaoImpl.javapackage login.dao.impl;import java.util.List;import login.dao.PersonDao;
    import login.vo.Person;import org.springframework.orm.ibatis.support.SqlMapClientDaoSupport;public class PersonDaoImpl extends SqlMapClientDaoSupport implements PersonDao { @SuppressWarnings("unchecked")
    public List<Person> queryPersonList() throws Exception {
    try {
    return this.getSqlMapClientTemplate().queryForList("person.queryPersonList");
    } catch(Exception e) {
    throw e;
    }
    }}
      

  2.   

    login/service/LoginService.javapackage login.service;import login.vo.User;public interface LoginService {

    public boolean login(User user) throws Exception;}
    login/service/PersonService.javapackage login.service;import java.util.List;import login.vo.Person;public interface PersonService {

    public List<Person> queryPersonList() throws Exception;}
    login/service/impl/LoginServiceImpl.javapackage login.service.impl;import login.dao.UserDao;
    import login.service.LoginService;
    import login.vo.User;public class LoginServiceImpl implements LoginService {

    private UserDao userDao; public boolean login(User user) throws Exception {
    String password = userDao.queryPassword(user.getUserName());
    if(password.equals(user.getPassword())) {
    return true;
    }

    return false;
    } public UserDao getUserDao() {
    return userDao;
    } public void setUserDao(UserDao userDao) {
    this.userDao = userDao;
    }}
    login/service/impl/PersonServiceImpl.javapackage login.service.impl;import java.util.List;import login.dao.PersonDao;
    import login.service.PersonService;
    import login.vo.Person;public class PersonServiceImpl implements PersonService {

    private PersonDao personDao; public List<Person> queryPersonList() throws Exception {
    return personDao.queryPersonList();

    } public PersonDao getPersonDao() {
    return personDao;
    } public void setPersonDao(PersonDao personDao) {
    this.personDao = personDao;
    }}
    login/vo/Person.javapackage login.vo;public class Person { private Integer id;

    private String name;

    private Integer age;

    private Integer money; public Integer getId() {
    return id;
    } public void setId(Integer id) {
    this.id = id;
    } public String getName() {
    return name;
    } public void setName(String name) {
    this.name = name;
    } public Integer getAge() {
    return age;
    } public void setAge(Integer age) {
    this.age = age;
    } public Integer getMoney() {
    return money;
    } public void setMoney(Integer money) {
    this.money = money;
    }
    }
    login/vo/User.javapackage login.vo;public class User {

    private Integer userID;

    private String userName;

    private String password; public Integer getUserID() {
    return userID;
    } public void setUserID(Integer userID) {
    this.userID = userID;
    } public String getUserName() {
    return userName;
    } public void setUserName(String userName) {
    this.userName = userName;
    } public String getPassword() {
    return password;
    } public void setPassword(String password) {
    this.password = password;
    }}
      

  3.   

    WebRoot\login.jsp<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <%@ taglib prefix="s" uri="/struts-tags" %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
    "http://www.w3.org/TR/html4/loose.dtd">

    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Login</title>
    <style type="text/css">
    #tableDiv {
    width: 400px;
    height: 300px;
    font-size: 12px;
    margin: 100px auto;
    }
    </style>
    </head>

    <body>
    <div id="tableDiv">
    <s:form action="login" method="post" theme="simple">
    <table>
    <tr>
    <td>用户名:</td>
    <td><input type="text" name="user.userName"/></td>
    </tr>
    <tr>
    <td>密码:</td>
    <td><input type="password" name="user.password"/></td>
    </tr>
    <tr>
    <td colspan="2"><input type="submit"/></td>
    </tr>
    </table>
    </s:form>
    </div>
    </body>
    </html>
    WebRoot\personList.jsp<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <%@ taglib prefix="s" uri="/struts-tags" %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
    "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>PersonList</title>
    <style type="text/css">
    #tableDiv {
    width: 400px;
    height: 300px;
    font-size: 12px;
    margin: 100px auto;
    }
    </style>
    </head>

    <body>

    <div id="tableDiv">
    <table border="1">
    <tr>
    <td>姓名</td>
    <td>年龄</td>
    <td>财产(万)</td>
    </tr>

    <s:if test="list.size eq 0">
    <tr>
    <td colspan="*">没有相关数据</td>
    </tr>
    </s:if>
    <s:else>
    <s:iterator value="list" status="st">
    <tr <s:if test="#st.odd">style="background-color:#FFFFFF" onmouseover="style.backgroundColor='yellow'"
    onmouseout="style.backgroundColor='FFFFFF'"</s:if>
    <s:else>"background-color:#EEEEEE" onmouseover="style.backgroundColor='yellow'"
    onmouseout="style.backgroundColor='EEEEEE'"</s:else>>

    <td><s:property value="name"/></td>
    <td><s:property value="age"/></td>
    <td><s:property value="money"/></td>

    </tr>
    </s:iterator>
    </s:else>
    </table>
    </div>

    </body>
    </html>
    WebRoot\error.jsp<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <%@ taglib prefix="s" uri="/struts-tags" %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
    "http://www.w3.org/TR/html4/loose.dtd">

    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Error</title>
    </head>

    <body>
    <h2>Error Message</h2>
    <br/>

    <s:actionerror/>
    <s:actionmessage/>
    <s:fielderror></s:fielderror>
    </body>
    </html>