struts2官方 中文教程 系列十:Form標簽


介紹

在本教程中,我們將探索其他Struts 2表單控件。在前面的教程中,我們介紹了如何使用Struts 2表單(處理表單、表單驗證和消息資源文件),我們介紹了如何使用Struts 2 head, form, textfield 控件和key屬性。本教程將探索使用Struts 2 select, radio, checkbox, and checkboxlist form 控件

貼個本帖的地址,以免被爬:struts2官方 中文教程 系列九:Debugging Struts 即 http://www.cnblogs.com/linghaoxinpian/p/6916619.html 

下載本章節代碼

 

本章節將建立一個如下的頁面

 

新建文件 edit.jsp、EditAction.java、src/model/State.java

並在/struts_basic/src/action/package.properties 添加如下內容:

后面中文被編碼后的內容,Myeclipse的特性,具體是什么中文內容,參見上一張圖(姓氏、名字、性別。。。)

修改struts.xml文件,添加edit的映射:

修改Person類,添加屬性

 1 package model;
2
3 public class Person {
4 private String firstName;
5 private String lastName;
6 private String email;
7 private int age;
8 private String sport;
9 private String residency;
10 private boolean over21;
11 private String carModel;
12
13 public String getFirstName() {
14 return firstName;
15 }
16
17 public void setFirstName(String firstName) {
18 this.firstName = firstName;
19 }
20
21 public String getLastName() {
22 return lastName;
23 }
24
25 public void setLastName(String lastName) {
26 this.lastName = lastName;
27 }
28
29 public String getEmail() {
30 return email;
31 }
32
33 public void setEmail(String email) {
34 this.email = email;
35 }
36
37 public int getAge() {
38 return age;
39 }
40
41 public void setAge(int age) {
42 this.age = age;
43 }
44
45 public String toString() {
46 return "First Name: " + getFirstName() + " Last Name: " + getLastName() +
47 " Email: " + getEmail() + " Age: " + getAge() ;
48 }
49
50 public String getSport(){
51 return "football";
52 }
53
54 public void setSport(String sport) {
55 this.sport = sport;
56 }
57
58 public String getResidency() {
59 return "zh";
60 }
61
62 public void setResidency(String residency) {
63 this.residency = residency;
64 }
65
66 public boolean isOver21() {
67 return true;
68 }
69
70 public void setOver21(boolean over21) {
71 this.over21 = over21;
72 }
73
74 public String getCarModel() {
75 return "Ford";
76 }
77
78 public void setCarModel(String carModel) {
79 this.carModel = carModel;
80 }
81
82 }

 

 

 edit.jsp

 1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
2 <%@ taglib uri="/struts-tags" prefix="s" %>
3 <!DOCTYPE>
4 <html>
5 <head>
6 <title>edit.jsp</title>
7 </head>
8 <body>
9 <s:form action="edit">
10 <s:textfield key="personBean.firstName"/>
11 <s:textfield key="personBean.lastName"/>
12 <s:textfield key="personBean.gender"/>
13 <s:select key="personBean.sport" list="sports"></s:select>
14 <s:radio key="personBean.gender" list="genders" />
15 <s:select key="personBean.residency" list="states" listKey="stateAbbr" listValue="stateName"/>
16 <s:checkbox key="personBean.over21" />
17 <s:checkboxlist key="personBean.carModel" list="carModelAvailable" />
18 </s:form>
19 </body>
20 </html>

 

EditAction.jsp

 1 package action;
2
3 import java.util.ArrayList;
4 import java.util.List;
5
6 import com.opensymphony.xwork2.ActionSupport;
7
8 import model.Person;
9 import model.State;
10
11 public class EditAction extends ActionSupport {
12
13 private Person personBean;
14 public String execute(){
15 personBean=new Person();
16 return SUCCESS;
17 }
18 //----------getter-setter start------------
19 public Person getPersonBean() {
20 return personBean;
21 }
22
23 public void setPersonBean(Person personBean) {
24 this.personBean = personBean;
25 }
26 //----------getter-setter end------------
27
28 //獲取 "運動列表"
29 public List<String> getSports(){
30 List<String> list=new ArrayList<String>();
31 list.add("basketball");
32 list.add("baseball");
33 list.add("football");
34 return list;
35 }
36
37 //獲取 "性別類表"
38 public String[] getGenders(){
39 return new String[]{"男","女","保密"};
40 }
41
42 //獲取 "居住地列表"
43 public List<State> getStates(){
44 List<State> list=new ArrayList<State>();
45 list.add(new State("zh","中國"));
46 list.add(new State("en", "English"));
47
48 return list;
49 }
50
51 //是否檢查 "滿21歲"
52 public boolean getOver21(){
53 return true;
54 }
55
56 //獲取"汽車模型列表"
57 public List<String> getCarModelAvailable(){
58 List<String> list=new ArrayList<String>();
59 list.add("Ford");
60 list.add("Chrysler");
61 return list;
62 }
63 }

  

Struts2 select 標簽

<s:select key="personBean.sport" list="sports"></s:select>

我們使用了在第七章的教程中討論的key屬性。key屬性由Struts 2框架用於生成其他屬性的值(例如name和label)。我們還使用與EditAction類相關聯的屬性文件(這里我們使用的是包級別的屬性文件package.properties

 注意,Struts 2表單標記有很多屬性,其中大部分都反映了與標記相關的HTML屬性。您可以通過查閱Struts 2的文檔來了解Struts 2表單標記的所有屬性。

 

list屬性的值被框架用來確定要調用的操作類的方法,以便創建選項值。在我們的示例應用程序中,“sports”的list屬性值在調用類EditAction的getSports方法得到結果。該方法返回一個包含“football”, “baseball”, and “basketball”的字符串數組。這些值用於在select標簽中創建選項標簽。

Struts 2框架決定通過使用key屬性的值來調用personBean對象上的方法來預先選擇哪個選項。因為key屬性的值是“personBean.sport”。這個框架調用了personBean對象的getSport方法()。如果該方法返回的值匹配一個選項值(我們返回的是football),那么該選項將被標記為“選中”。

 

Struts2 Radio標簽

<s:radio key="personBean.gender" list="genders" />

同樣,key屬性的值決定了name和label性的值。標簽的文本來自於屬性文件(package.properties)。就像Struts 2的select標簽一樣,Struts 2 Radio標簽的list屬性使框架調用了EditAction類的genders方法。返回的字符串對象數組用於創建單獨的單選按鈕。

 

Struts 2 select標簽-對象支持

您可能需要創建一個Struts 2 select標簽,其中顯示給用戶的值與實際的值是不同的(即key-value)。在示例應用程序中,用戶的居住地存儲為兩個字母的縮寫(如value=“zh”),在頁面上應該顯示完整的名稱(中國),即如下效果:

<tr>
<td class="tdLabel">
<label for="save_personBean_residency" class="label">State resident:</label>
</td>
<td>
<select name="personBean.residency" id="save_personBean_residency">
<option value="zh">中國</option>
<option value="en">English</option>

</select>
</td>
</tr>

 

要在Struts 2中創建這樣一個選擇框,您可以使用以下代碼:

<s:select key="personBean.residency" list="states" listKey="stateAbbr" listValue="stateName" />

list值告訴框架調用EditAction類的getStates方法。該方法返回State象的ArrayList。每個State對象都有getStateAbbr和getStateName方法。listKey屬性告訴框架使用調用getStateAbbr方法返回的值作為HTML選項標簽的value屬性的值,以及通過調用getStateName方法返回給用戶顯示的值。

State類

package model;

public class State {
private String stateAbbr; //實際值
private String stateName; //顯示值

public State(String stateAbbr,String stateName){
this.stateAbbr=stateAbbr;
this.stateName=stateName;
}

public String getStateAbbr() {
return stateAbbr;
}
public void setStateAbbr(String stateAbbr) {
this.stateAbbr = stateAbbr;
}
public String getStateName() {
return stateName;
}
public void setStateName(String stateName) {
this.stateName = stateName;
}
}

 通過調用personBean對象的getResidency 方法返回的值,確定選擇標記的選項標記中哪些是被選中的。在我們的例子中,由於getresi等號返回“KS”,所以其value屬性等於“zh”的選項標記被標記為被選中。

 

Struts 2 Checkbox 標簽

<s:checkbox key="personBean.over21" />

 

Struts 2復選框標簽用於創建HTML復選框標簽。key屬性的值告訴框架需要調用什么方法來確定復選框是否被選中。這個方法是isOver21(第66行)

當表單被提交並且復選框沒有選中時,復選框將沒有任何值(這是HTML表單的工作方式)。由於Struts 2框架需要更新personBean的over21實例字段的值,因為檢查框沒有值null,所以框架需要一種方法來確定在表單提交之后復選框是否被選中。如果您查看由Struts 2 checkbox標簽創建的HTML代碼,您將看到它創建了一個與 personBean.over21 相關聯的隱藏字段。當Struts 2框架攔截該表單的提交時,它將使用這個隱藏的表單字段來檢查相關的復選框字段是否存在於表單數據中。如果該復選框字段不存在,那么Struts 2框架將知道將personBean對象的over21實例變量的值更新為false。

 

struts2 Checkboxlist(復選框)標簽

<s:checkboxlist key="personBean.carModels" list="carModelsAvailable" />

checkboxlist標簽中的list屬性值告訴Struts 2框架,要調用哪個方法來獲得汽車模型列表。在這個示例應用程序中,框架將調用EditAction類的getCarModelsAvailable方法。該方法返回一個字符串數組。對於數組的每個元素,Struts 2框架創建一個復選框(包括上面所描述的相關隱藏字段)。checkboxlist標簽中的key屬性值告訴Struts 2框架調用personBean對象的getCarModels方法(與前面都一樣),list屬性值是調用EditAction類的getCarModelsAvailable方法(第57行),同理上面的標簽無區別。

 

總結

還有其他一些Struts 2表單控件,您應該研究一下。如果您需要更多關於Struts 2表單標記的信息,請參考Struts 2的文檔,http://stru.apache.org。


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2020 ITdaan.com