Could not find action or result

本文介绍如何在Struts框架中配置用户登录验证,并解决添加表单验证后出现的异常问题。通过在XML配置文件中添加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

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值