struts2的action基础

看代码及注释

LoginAction.java

  1. package edu.hust.action;
  2. import com.opensymphony.xwork2.ActionSupport;
  3. //strust2.0的Action可以不继承任何类(这个和struts1.3有很大区别). 此时struts2.0的Action类似一个JavaBean,只有getter、setter和execute()方法。
  4. //但一般会继承webwork包下的ActionSupport。实现一些逻辑处理功能。
  5. public class LoginAction extends ActionSupport {
  6.     
  7.     private static final long serialVersionUID = 1L;
  8.     
  9.     private String uname;
  10.     private String pword;
  11.     /*
  12.      * struts2从页面取值是通过set()方法完成的。例如:
  13.      * setUsername(String username) --> setUsername()方法中的方法名和参数名必须和页面表单中的name属性一致。然后通过this.uname=username;将值传递给LoginAction的uname变量.
  14.      * 即提交时是找setUsername()方法并利用反射技术技术进行赋值,而不是直接找属性变量进行赋值。
  15.      * 
  16.      * 页面从Action中取值并打印是通过get()方法完成的。
  17.      * getUsername()中的方法名的<get后面的Username>必须和页面表单中的name属性一致。通过return uname将值返回。在页面用el取值时,必须用username(与getUsername()一致),而不能用uname。
  18.      * 即取值时是找getUsername()方法并利用反射技术技术进行取值,而不是直接找属性变量进行取值。
  19.      * 
  20.      * Struts1.3中的ActionForm也是这个原理
  21.      */
  22.     public String getUsername() {
  23.         return uname;
  24.     }
  25.     public void setUsername(String username) {
  26.         this.uname = username;
  27.     }
  28.     public String getPassword() {
  29.         return pword;
  30.     }
  31.     public void setPassword(String password) {
  32.         this.pword = password;
  33.     }
  34.     
  35.     @Override
  36.     public void validate() {
  37.         //如果validate()未通过,系统会自动返回一个INPUT给struts.xml,让其跳转至错误显示页面。
  38.         if (this.getUsername() == null || "".equals(this.getUsername().trim())) {
  39.             //addFieldError()方法的第一个参数必须与页面表单中的name属性一致。这样才可以使错误信息找到正确的显示位置。
  40.             this.addFieldError("username""username required");
  41.         }
  42.         if (this.getPassword() == null || "".equals(this.getPassword().trim())) {
  43.             this.addFieldError("password""password required");
  44.         } 
  45.     }
  46.     public String execute() {
  47.         // struts2自定义了一些流程返回标志:ActionSupport类继承了Action接口,这些标志来自Action接口。请看帮助文档。
  48.         /*
  49.          * return INPUT --> The action execution require more input in order to succeed;
  50.          * return LOGIN --> The action couldn't execute, since the user most was not logged in;
  51.          * return NONE --> The action execution was successful but do not show a view;
  52.          * return SUCCESS --> The action execution was successful;
  53.          * return ERROR --> The action execution was a failure;
  54.          */
  55.         if ("forrest".equals(this.getUsername().trim()) && "vivian".equals(this.getPassword().trim())) {
  56.             return SUCCESS;
  57.         } else {
  58.             this.addFieldError("username""username or password error");
  59.             return LOGIN; //对应struts.xml中的<result name="login">/login.jsp</result>
  60.         }
  61.     }
  62. }

struts.xml

  1. <struts>
  2.     <!-- 表示struts2包继承自struts-default包 -->
  3.     <package name="struts2" extends="struts-default">
  4.         <action name="login" class="edu.hust.action.LoginAction">
  5.             <!-- 如果验证不成功,validate()方法自动返回input,让其跳转到显示错误页面,struts1中也是通过input跳转到错误页面的哦 -->
  6.             <!-- 无论哪个Action, 都必须配置好input的转发页面, 即使自己没有做验证, struts2也会自动做简单验证, 如果验证不成功, 会根据这里配置的input找到错误输出页面 -->
  7.             <!-- 与struts1不同,错误页面不用写任何错误标签也可以接收到错误信息(s:form表单集成了错误显示)(eg:struts1中有html:errors错误标签) -->
  8.             <!-- struts2除了表单自动显示,也可以通过s:fielderror和s:actionerror这两个标签来显示 -->
  9.             <result name="input">/login.jsp</result>
  10.             <result>/result.jsp</result>
  11.             <result name="login">/login.jsp</result>
  12.         </action>
  13.     </package>
  14. </struts>

登陆页面就不写了。主要看注释,有些注释很有用

你可能感兴趣的:(struts,Webwork,input,action,login,getter)