Could not find action or result

Struts文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
        "http://struts.apache.org/dtds/struts-2.5.dtd">
<struts>

	<constant name="struts.enable.DynamicMethodInvocation" value="false" />
	<constant name="struts.devMode" value="true" />
	<package name="default" namespace="/" extends="struts-default">
	</package>

	<package name="users" namespace="/users" extends="default">
		<!-- <action name="*_*" class="com.joey.action.{1}Action" method="{2}"> -->
		<action name="Users_login" class="com.joey.action.UsersAction" method="login">
			<result name="login_success">Users_login_success.jsp</result>
			<result name="login_failure">Users_login.jsp</result>
		</action>
		<action name="Users_logout" class="com.joey.action.UsersAction" method="logout">
			<result name="logout_success">Users_login.jsp</result>
		</action>
	</package>

</struts>


添加表單驗證需要在Java類中覆蓋validate方法,這是用於用戶登錄的Java類:

package com.joey.action;

import com.joey.entity.Users;
import com.joey.service.UsersDAO;
import com.joey.service.impl.UsersDAOImpl;
import com.opensymphony.xwork2.ModelDriven;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.apache.struts2.interceptor.validation.SkipValidation;

public class UsersAction extends SuperAction implements ModelDriven<Users>{

	private static Logger logger = LogManager.getLogger(UsersDAOImpl.class.getName());
    private Users user=new Users();

    /**
     * 用戶登錄
     * @return
     */
    public String login(){
        logger.info("正在登錄");
        UsersDAO usersDAO=new UsersDAOImpl();
        if (usersDAO.usersLogin(user)){
        	// 在session中保存成功登陸的用戶名
        	session.setAttribute("loginUserName", user.getUsername());
            return "login_success";
        }else {
            return "login_failure";
        }
    }
    
    /**
     * 用戶註銷
     * @return
     */
    @SkipValidation//跳過驗證
    public String logout() {
    	 logger.info("正在註銷");
    	if(session.getAttribute("loginUserName")!=null) {
    		session.removeAttribute("loginUserName");
    	}
    	return "logout_success";
    }
    
    /**
     * 表單驗證
     */
    @Override
    public void validate() {
    	// 用戶名驗證
    	if("".equals(user.getUsername().trim())) {
    		this.addFieldError("usernameError", "用戶名不能爲空!!");
    	}
    	// 密碼長度驗證
    	if(user.getPassword().length()<6) {
    		this.addFieldError("usernameError", "密碼長度不少與6");
    	}
    }

    @Override
    public Users getModel() {
        return this.user;
    }
}

在覆蓋validate方法之前可以正常登錄,但是添加了表單驗證後就報錯

[13:24:01:440] [ERROR] - org.apache.struts2.dispatcher.Dispatcher.logConfigurationException(Dispatcher.java:590) - Could not find action or result: /student/users/Users_login.action
com.opensymphony.xwork2.config.ConfigurationException: No result defined for action com.joey.action.UsersAction and result input

我的解決方法是爲登錄的action添加一個result標籤:

 <action name="Users_login" class="com.joey.action.UsersAction" method="login">
	<result name="login_success">Users_login_success.jsp</result>
	<result name="login_failure">Users_login.jsp</result>
	<result name="input">Users_login.jsp</result>
</action>
OK啦!!

這是答案來源:https://stackoverflow.com/questions/5742281/no-result-defined-for-action-and-result-input

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章