加了validate()方法后没办法登录,报404错

来源:2-8 完成表单验证功能

qq_孤影_2

2015-12-29 13:07

为什么加了validate()方法后没办法登录?报错:HTTP Status 404 - /imooc_sh/users/Users_login.jsp

写回答 关注

9回答

  • FloatingShuYin
    2016-09-17 09:48:49

    默认validate()

    输出的错误信息会返回一个input 值。

    所以struts.xml文件中需要定义一个结果为 input 的结果


    解决方法1:就是加一条名为input的result


        <action name="*_*" class="action.{1}Action" method="{2}">

        <result name="login_success">/users/Users_login_success.jsp</result>

        <<result name="login_failure">/users/Users_login.jsp</result>

        <result name="logout_success">/users/Users_login.jsp</result>

        <result name="input">/users/Users_login.jsp</result>

        </action>


    解决方法2: 将UsersAction中 login() 中 登陆失败的返回值改为input  还有对应struts.xml文件中的result name也改为input  

    if(udao.usersLogin(user))

    {

    //在session中保存登陆成功的用户名

    session.setAttribute("loginUserName", user.getUsername());

    System.err.println("成功");

    return "login_success";

    }

    else

    {

    System.err.println(user.getUsername());

    System.err.println(user.getPassword());

    System.err.println(user.getUid());

    // return "login_failure";

    return "input";   //将登陆失败的返回值改为input

    }


        <action name="*_*" class="action.{1}Action" method="{2}">

        <result name="login_success">/users/Users_login_success.jsp</result>

        <result name="input">/users/Users_login.jsp</result><!-- 这条result的 name改为input-->

        <result name="logout_success">/users/Users_login.jsp</result>

        </action>


  • FloatingShuYin
    2016-09-17 09:06:37

    同 Could not find action or result: /immoc_sh/users/Users_login.action

    No result defined for action action.UsersAction and result input


  • 慕粉15160033427
    2016-08-15 23:02:19

    老师设下重重陷阱来考验我们解决问题的能力啊

  • 迷途4
    2016-07-17 13:16:21

    真的解决了,我就说按照老师一步步配的怎么有问题呢。。。

  • qq_黑色契约_0
    2016-07-10 10:13:37

    在做登录验证的时候老是报错

    Could not find action or result: /immoc_sh/users/Users_login.action

    No result defined for action action.UsersAction and result input

    是不是老师忘配置了

  • 庄学爸
    2016-04-16 18:30:27

    你可以直接在login方法中判断,在addFieldError()方法后需要return INPUT,在Struts2.xml中需要配置一个返回视图,返回登录页面,如果你不写return INPUT;,那么你可以重写继承ActionSupport的validate()方法,就是老师的案例,不需要return INPUT,也不需要在Struts2.xml中配置INPUT视图.

    public String login(){

    //当为true,即用户名与密码正确,返回登录成功界面.

    if(service.userLogin(user)){

    this.session.setAttribute("loginUserName", user.getUsername());

    return "login_success";

    }

    //如果提交的用户名为空,则提供客户端错误信息,前台页面中获取该属性.

    else if(user.getUsername().trim()==null){

    this.addFieldError("usernameError", "用户名不能为空!");

    return INPUT;

    }

    //如果提交的密码长度少于6,则提供客户端错误信息,前台页面中获取该属性.

    else if(user.getPassword().length()<6){

    this.addFieldError("passwordError","密码长度不能少于6!");

    return INPUT;

    }

    //如果填写的用户名与密码不匹配,则返回登录页面.

    else{

    this.addFieldError("notAllowed","请输入正确的用户名与密码!");

       return "login_failure";

        }

    }


    struts2.xml中:

    <action name="*_*" class="com.own.action.{1}Action" method="{2}">

    <interceptor-ref name="userStack"/>

    <result name="login_success">/jsp/user/login_success.jsp</result>

    <result name="login_failure">/jsp/user/login.jsp</result>

    <result name="logout_success">/jsp/user/login.jsp</result>

    <result name="INPUT">/jsp/user/login.jsp</result>

    </action>

    或者使用老师的方式,重写validate()方法:

    public void validate(){

    //如果提交的用户名为空,则提供客户端错误信息,前台页面中获取该属性.

     if(user.getUsername().trim()==null){

    this.addFieldError("usernameError", "用户名不能为空!");

    }

    //如果提交的密码长度少于6,则提供客户端错误信息,前台页面中获取该属性.

    else if(user.getPassword().length()<6){

    this.addFieldError("passwordError","密码长度不能少于6!");

    return INPUT;

    }

    }

    全部手打,希望你能理解.

    车车啊

    改了好久都没用,终于按你的改好了,必须点赞

    2017-05-25 12:29:19

    共 5 条回复 >

  • HOME3
    2016-01-24 23:40:13

    使用默认的validate()需要在struts.xml配置 

    <result name="input">/users/Users_login.jsp</result>才能返回登录页面去显示错误信息。


    zhouwh

    按这个方法解决问题了,但是不知道为什么要这样

    2016-09-11 17:27:52

    共 2 条回复 >

  • silenceyawn
    2016-01-03 17:46:57

    使用struts tages 需要在web.xml文件配置过滤器

    这样:

     <filter>
      <filter-name>struts</filter-name>
      <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
     </filter>
     <filter-mapping>
      <filter-name>struts</filter-name>
      <url-pattern>/*</url-pattern>
     </filter-mapping>

    而不是这样:

    <filter>
      <filter-name>struts2</filter-name>
      <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
     </filter>
     <filter-mapping>
      <filter-name>struts2</filter-name>
      <url-pattern>*.action</url-pattern>
     </filter-mapping>


  • prosche
    2016-01-03 14:00:45

    404 未找到页面,url路径的问题,看看namespace  action 和你xml配置的一不一样,有可能是"/"多写了 。使用默认的JSP页面的时候 basepath 会在后面制动加上一个反斜线 。

使用Struts2+Hibernate开发学生信息管理功能

Strust2+Hibernate整合开发案例,Java Web开发技能更上一层楼

80694 学习 · 797 问题

查看课程

相似问题