为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

正在回答

10 回答

默认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>


2 回复 有任何疑惑可以回复我~

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

No result defined for action action.UsersAction and result input


0 回复 有任何疑惑可以回复我~

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

0 回复 有任何疑惑可以回复我~

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

0 回复 有任何疑惑可以回复我~

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

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

No result defined for action action.UsersAction and result input

是不是老师忘配置了

0 回复 有任何疑惑可以回复我~

你可以直接在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;

}

}

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

9 回复 有任何疑惑可以回复我~
#1

庄学爸

说错了,使用老师的方法,也需要在Struts2.xml中配置INPUT视图
2016-04-16 回复 有任何疑惑可以回复我~
#2

java家洼 回复 庄学爸

那为什么老师没有配置input视图,也没有报错呢?
2016-05-28 回复 有任何疑惑可以回复我~
#3

qq_难分真与假_03225671

最后老师的那个。void 方法不能返回值吧?
2016-12-21 回复 有任何疑惑可以回复我~
#4

庄学爸 回复 java家洼

肯定配置了 你下载看看源码就知道
2016-12-21 回复 有任何疑惑可以回复我~
#5

车车啊

改了好久都没用,终于按你的改好了,必须点赞
2017-05-25 回复 有任何疑惑可以回复我~
查看2条回复

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

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


21 回复 有任何疑惑可以回复我~
#1

xb7420

请问为啥要这样做呢,新手求解答?
2016-04-14 回复 有任何疑惑可以回复我~
#2

zhouwh

按这个方法解决问题了,但是不知道为什么要这样
2016-09-11 回复 有任何疑惑可以回复我~

使用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>


1 回复 有任何疑惑可以回复我~

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

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

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

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信