加了validate()方法后没办法登录,报404错
为什么加了validate()方法后没办法登录?报错:HTTP Status 404 - /imooc_sh/users/Users_login.jsp
为什么加了validate()方法后没办法登录?报错:HTTP Status 404 - /imooc_sh/users/Users_login.jsp
2015-12-29
默认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>
你可以直接在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;
}
}
全部手打,希望你能理解.
使用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>
举报