package com.test.action;import com.opensymphony.xwork2.ActionSupport;public class LoginAction extends ActionSupport{
 private String username; 
 private String userpassword;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getUserpassword() {
return userpassword;
}
public void setUserpassword(String userpassword) {
this.userpassword = userpassword;
}
  
public String execute() throws Exception{ 
if("hello".equals(this.getUsername().trim())&&"word".equals(this.getUserpassword().trim())){
return "success";  
}  
else{  
this.addFieldError("username", "username or password required");
return "failer";
}

} public void validate() {
   if(null==this.getUsername()|"".equals(this.getUsername().trim())){ 
   this.addFieldError("username","username required"); 
   } 
   if(null==this.getUserpassword()|"".equals(this.getUserpassword().trim())){ 
   this.addFieldError("userpassword","userpassword required"); 

   
   } 
   }{ 


  问题1. validate() 跟execcute()方法一样嘛?都是系统自动调用吗?不用页面调用吗?
      2.什么情况下需要抛出异常 ,为什么要抛出异常,请结合本例说明。。
     3.Struts.xml文件里 <action name="input">中的INPUT对应validate方法吗?是固定这么写的吗?只要方法validate运行 就会找到INPUT的吗?

解决方案 »

  1.   

    补充问题:
    1.this.getUsername().trim()中的.trim()是什么意思 我知道是空格的意思。但我不明白 获取用户名字干嘛还要加空格 
    2.this.addFieldError("username","username required"); 前面这个THIS 是不是有点多余
      

  2.   

    还有就是 我return failer 以后 是不是就回到了JSP页面。。不执行validate方法了?但我实际是还是执行了一遍validate方法 这是为什么啊
      

  3.   

    1,strust2,Action中系统默认调用execcute()方法,或者配置文件中指定使用的方法,由于你的类继承了ActionSupport,重写validate() 方法,应该会在验证时自动调用,
    2,Strust2中也可以使用validation.xml配置文件实现验证,具体google一下。
    3,调用了有可能出现异常的方法最好都要捕捉或声明抛出异常,如果你以上代码中validate有效则不会抛出异常;
     <action name="input">中的INPUT对应页面上响应的action名称,楼主想说的是不是<result name="input"....>啊?
    另外,trim()是去掉空格的意思而不是加空格;
    this.addFieldError("username","username required"); 前面这个THIS 可有可无。
    return failer 以后 是不是就回到了JSP页面?--是的,到了页面当然不执行validate,要执行也是在进入execcute方法之前执行的。希望对你有帮助。