Struts 2公式ドキュメント学習-Processing Forms

22324 ワード

Reference:《 ST2.NO.0005 struts2.0公式サイトドキュメント学習ノートの5-Processing Forms 》《 Struts 2のブロック(一)
ダイレクトコード:登録プロセス
PersonBean.java
   1: package test;
   2:  
   3: public class PersonBean implements java.io.Serializable {
   4:     private static final long serialVersionUID = -5007279129818462704L;
   5:     private String firstName;
   6:     private String lastName;
   7:     private String email;
   8:     private int age;
   9:  
  10:     public String getFirstName() {
  11:         return firstName;
  12:     }
  13:  
  14:     public void setFirstName(String firstName) {
  15:         this.firstName = firstName;
  16:     }
  17:  
  18:     public String getLastName() {
  19:         return lastName;
  20:     }
  21:  
  22:     public void setLastName(String lastName) {
  23:         this.lastName = lastName;
  24:     }
  25:  
  26:     public String getEmail() {
  27:         return email;
  28:     }
  29:  
  30:     public void setEmail(String email) {
  31:         this.email = email;
  32:     }
  33:  
  34:     public int getAge() {
  35:         return age;
  36:     }
  37:  
  38:     public void setAge(int age) {
  39:         this.age = age;
  40:     }
  41:  
  42:     public String toString() {
  43:         return "First Name: " + getFirstName() + " Last Name:  "
  44:                 + getLastName() + " Email:      " + getEmail() + " Age:      "
  45:                 + getAge();
  46:     }
  47: }
 RegisterAction.java
   1: package test;
   2:  
   3: import com.opensymphony.xwork2.ActionSupport;
   4:  
   5: public class RegisterAction extends ActionSupport {
   6:  
   7:     private static final long serialVersionUID = -726538404572102944L;
   8:     private PersonBean personBean;
   9:  
  10:     public String execute() {
  11:         /* Call other Service class to store personBean's state in database */
  12:         return SUCCESS;
  13:     }
  14:  
  15:     public void setPersonBean(PersonBean personBean) {
  16:         this.personBean = personBean;
  17:     }
  18:  
  19:     public PersonBean getPersonBean() {
  20:         return this.personBean;
  21:     }
  22: }

Register.jsp
   1: <%@ page language="java" contentType="text/html; charset=utf-8"
   2:     pageEncoding="utf-8"%>
   3: <%@ taglib prefix="s" uri="/struts-tags"%>
   4: <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
   5: <html>
   6: <head>
   7: <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
   8: <title>register</title>
   9: </head>
  10: <body>
  11:     <s:form action="register">
  12:         <s:textfield name="personBean.firstName" label="First name" />
  13:         <s:textfield name="personBean.lastName" label="Last name" />
  14:         <s:textfield name="personBean.email" label="Email" />
  15:         <s:textfield name="personBean.age" label="Age" />
  16:         <s:submit />
  17:     </s:form>
  18: </body>
  19: </html>

私が理解する過程:
JSPファイルのというコードは、まずRegisterActionでpersonBeanというオブジェクトを検索し、actionのgetPersonBean()メソッドを呼び出します.personBeanはnullで、nullと発見されたときにsetPersonBeanが呼び出され、setPersonBean()のパラメータを使用するとフレームワークが自動的にPersonBeanクラスのデフォルトの構造方法でこのオブジェクトが作成され(このときpersonBeanはnullではありませんがそのすべての値、firstNameなどはnull)、そしてgetPersonBeanが呼び出されてnullではないpersonBeanオブジェクトが得られます.次はpersonBeanを検索します.firstNameです.personBeanのsetFisrtName()を呼び出して値を割り当てます.ここはブレークポイントを設定するのを忘れましたが、personBeanと同じようにgetFirstName()を呼び出してnull(nullでも後ろのsetterを呼び出すと思います)と発見し、setFirstName()を呼び出して女の子に値を与えたと想像できます.これらはすべてexecute()メソッドが実行される前に発生しますよ!Thanks to Struts 2のデフォルトのブロッキング.
登録が成功するとjsp
struts.xmlクリップ
   1: <action name="register" class="test.RegisterAction"
   2:             method="execute">
   3:             <result name="success">/test/Thankyou.jsp</result>
   4:         </action>

Thankyou.jsp
   1: <%@ page language="java" contentType="text/html; charset=UTF-8"
   2:     pageEncoding="UTF-8"%>
   3: <%@taglib prefix='s' uri='/struts-tags'%>
   4: <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
   5: <html>
   6: <head>
   7: <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
   8: <title>Registration Successful</title>
   9: </head>
  10: <body>
  11:     <h3>Thank you for registering for a prize.</h3>
  12:     <p>
  13:         Your registration information:
  14:         <s:property value="personBean" />
  15:     </p>
  16:     <p>
  17:         <a href="&lt;s:url action='index' />"<Return to home page</a>.
  18:     </p>
  19: </body>
  20: </html>

この中には<:property value="personBean"/>がgetでactionの中のperseonBeanオブジェクト(すでに値があるよ)を得てtoString()が出力されています
 
 
以上の理解に誤りがあれば指摘したい