書名:<< Struts2 權(quán)威指南--基于WebWork核心的MVC開發(fā) >>
一、對(duì)Struts2的認(rèn)識(shí):
1、Action類可以是一個(gè)包含execute方法的POJO類,struts框架提供了一個(gè)Action接口及一個(gè)ActionSupport工具類,用戶可以根據(jù)自己的需求實(shí)現(xiàn)或者繼承來實(shí)現(xiàn)自己的Action類。進(jìn)而實(shí)現(xiàn)用戶Action類與HttpServlet API的脫離,有利于測(cè)試。
2、線程安全:Struts2 Action對(duì)象為每個(gè)請(qǐng)求產(chǎn)生一個(gè)實(shí)例
3、丟棄Struts1存在的ActionForm,Struts2直接使用Action屬性來封裝用戶請(qǐng)求屬性,也可以封裝響應(yīng)值。Action所有的屬性都是被封裝到ValueStack對(duì)象中,Action屬性名可以理解為ValueStack中的value的名字。在輸出端可以通過ValueStack的findValue()方法查看某個(gè)表達(dá)式的值
4、OGNL
5、數(shù)據(jù)驗(yàn)證:Action類繼承ActionSupport,并重寫validate()方法;或者通過只繼承ActionSupport,但使用XWork校驗(yàn)框架進(jìn)行校驗(yàn)
6、配置文件struts.xml 、struts.properties
二、實(shí)例
1、在web.xml配置struts2 的核心Filter配置
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
2、實(shí)現(xiàn)用戶Action并繼承ActionSupport
public class LoginAction extends ActionSupport {
private String username;
private String password;
private String[] books;
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String[] getBooks() {
return books;
}
public void setBooks(String[] books) {
this.books = books;
}
public String execute() throws Exception{
if(getUsername().equals("2b")){
ActionContext.getContext().getSession().put("user",getUsername());
BookService bs = new BookService();
setBooks(bs.getBooks());
return "success";
}else{
return "error";
}
}
public void validate(){
/* if(getUsername() == null || getUsername().trim().equals("")){
addFieldError("username",getText("user.required"));
}*/
}
}
2.1、跟蹤用戶狀態(tài):struts2提供了一個(gè)ActionContext類,該類提供了一個(gè)getSession的方法,但該方法的返回值類型并不是HttpSession,而是Map ;Struts2的攔截器會(huì)負(fù)責(zé)該Session與HttpSession之間的轉(zhuǎn)換。把用戶名存儲(chǔ)在map中,在輸出頁面通過HttpSession的取得user的值
ActionContext.getContext().getSession().put("user",getUsername());
2.2、Action屬性都被封裝到ValueStack對(duì)象中,頁面輸出信息
welcome ${sessionScope.user}
<table border="1">
<tr><td>JSP標(biāo)簽顯示</td></tr>
<%
ValueStack vs = (ValueStack)request.getAttribute("struts.valueStack");
String[] books = (String[])vs.findValue("books");
for(String book : books){
%>
<tr><td><%=book %></td></tr>
<%
}
%>
</table>
<table border="1">
<tr><td colspan="2">struts 標(biāo)簽顯示</td></tr>
<s:iterator value="books" status="index">
<s:if test="#index.odd==true">
<tr style="background-color:#ccc">
</s:if>
<s:else>
<tr>
</s:else>
<td>書名:</td>
<td><s:property/></td>
</s:iterator>
</table>
2.3、數(shù)據(jù)校驗(yàn):
A:重寫validate方法,并把提示信息通過addFieldError("username",getText("user.required")添加到ActionSupport的fieldErrors域中,然后通過OGNL表達(dá)式輸出。(注:<s:form>具備輸出校驗(yàn)錯(cuò)誤的能力)
B:XWork框架校驗(yàn),Action類繼承ActionSupport類,但不需要重寫validate方法。在Action類同一路徑下,增加校驗(yàn)規(guī)則文件,文件的命名格式為"ActionName-validation.xml",填寫具體驗(yàn)證規(guī)則
posted on 2008-02-22 14:08
扭曲的鉛筆 閱讀(608)
評(píng)論(1) 編輯 收藏 所屬分類:
J2EE