然后,創(chuàng)建處理類LoginAction。代碼如下:
package com.action;
import com.model.User;
import com.opensymphony.xwork2.ActionSupport;
public class LoginAction extends ActionSupport {
private User user;
private String message;
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
……//省略了message屬性的setXXX()與getXXX()方法
public String execute() {
if(user.getUserName().equals("tsoft")&&user.getUserPass().equals("111")) {
message="登錄成功!";
return "yes";
}else{
message="登錄失?。?;
return "no";
}
}
}
其次,修改login.jsp頁面。代碼如下:
<tr>
<td>用戶名:</td>
<td><s:textfield name="user.userName"/></td>
</tr>
<tr>
<td>密 碼:</td>
<td><s:password name="user.userPass"/></td>
</tr>
Struts配置文件不需要修改,接下來修改welcome.jsp文件。
<%@ taglib uri="/struts-tags" prefix="s" %>
<font size="3"><b><s:property value="message"/></b></font>
<table border="0">
<tr>
<td>
用戶名:<b><s:property value="user.userName"/></b>--
密 碼:<b><s:property value="user.userPass"/></b>
</td>
</tr>
</table>
最后,分別在“用戶名”和“密碼”文本框中輸入“tsoft”和“111”,運行結(jié)果如圖1.41所示。
2.Struts 2.0中的表單驗證
在Struts 2.0中可使用校驗框架和Action類中的驗證方法來對表單數(shù)據(jù)進行驗證,本系統(tǒng)采用的是第二種方法。
Action類中的驗證方法的命名規(guī)則為validateXXX(),其中XXX表示Action類中用來處理請求的某個方法名稱。當(dāng)請求被轉(zhuǎn)發(fā)給Action類時,該Action會根據(jù)用戶請求來調(diào)用相應(yīng)的方法處理請求,若在這之前需要進行表單數(shù)據(jù)驗證,則可實施與該方法對應(yīng)的validateXXX()驗證方法進行驗證。
例如,本系統(tǒng)中用來處理前臺操作的Action類中的Add()方法用來處理信息發(fā)布的請求,在Add()方法中需要編寫向數(shù)據(jù)表中插入記錄的代碼,所以在這之前需要驗證用戶輸入的表單數(shù)據(jù)是否為空,可在Action類中實現(xiàn)validateAdd()方法進行驗證,驗證成功后,會自動調(diào)用Add()方法。
validateXXX()驗證方法不需要返回值,在方法中可將提示信息通過addFieldError()方法進行保存,這樣,返回驗證失敗的提示頁面后,就可通過fielderror標(biāo)簽輸出提示信息。
Struts 2.0將根據(jù)是否調(diào)用了addFieldError()方法判斷驗證是否成功,若validateXXX()方法的程序流程執(zhí)行了addFieldError()方法,則驗證失敗,那么在validateXXX()方法的流程結(jié)束后,將返回到配置文件中指定的JSP頁面。
例如,本系統(tǒng)在配置文件中對登錄操作進行的配置如下:
<action name="login_*" class="com.yxq.action.AdminAction" method="{1}">
<result name="input">/pages/admin/Login.jsp</result>
<result name="login">/pages/admin/view/AdminTemp.jsp</result>
<result name="logout" type="redirectAction">index</result>
</action>
其中加粗的代碼就是對表單驗證失敗時的配置,此時<result>元素的name屬性值必須為input,/pages/admin/ogin.jsp則表示驗證失敗后返回的頁面。
3.解決Struts 2.0中的中文亂碼問題
在Struts 2.0中解決中文亂碼問題,可通過一種簡單的方法給予實現(xiàn)。在應(yīng)用的WEB-INF/classes目錄下創(chuàng)建一個struts.properties資源文件,Struts 2.0會默認(rèn)加載WEB-INF/classes目錄下的該文件,在該文件中進行如下編碼:
struts.i18n.encoding=gb2312
其中struts.i18n.encoding指定了Web應(yīng)用默認(rèn)的編碼。
1.8.3 信息發(fā)布實現(xiàn)過程
信息發(fā)布用到的數(shù)據(jù)表:tb_info。
用戶通過單擊頁面頂部的“發(fā)布信息”超鏈接,即進入信息發(fā)布頁面,在該頁面中填寫發(fā)布信息后,提交表單,在InfoAction處理類中獲取表單數(shù)據(jù)進行驗證,驗證成功后向數(shù)據(jù)表中插入數(shù)據(jù),完成信息的發(fā)布。下面按照這個操作流程,介紹信息發(fā)布的實現(xiàn)過程。
1.實現(xiàn)頁面頂部的“發(fā)布信息”超鏈接
在view目錄下的top.jsp文件中實現(xiàn)進入信息發(fā)布頁面的“發(fā)布信息”超鏈接。代碼如下:
例程41 代碼位置:光盤\TM\01\view\top.jsp
<a href="info_Add.action?addType=linkTo" style="color:gray">[發(fā)布信息]</a>
該超鏈接所請求的路徑為info_Add.action,根據(jù)在Struts配置文件中的配置,由InfoAction類中的Add()方法處理該請求,參數(shù)addType通知Add()方法當(dāng)前請求的操作,其值若為linkTo,表示僅僅是連接到信息發(fā)布頁面;若為add,則表示向數(shù)據(jù)表中插入記錄。
2.創(chuàng)建發(fā)布信息的addInfo.jsp頁面
在信息發(fā)布頁面中包含一個表單,該表單中的元素如表1.11所示。
addInfo.jsp頁面的關(guān)鍵代碼如下:
例程42 代碼位置:光盤\TM\01\pages\add\addInfo.jsp
<%@ taglib prefix="s2" uri="/struts-tags" %>
<s2:form action="info_Add.action" theme="simple">
<input type="hidden" name="addType" value="add"/>
<tr>
<td>信息類別:</td>
<td> <s2:select emptyOption="true" list="#session.typeMap" name="infoSingle.infoType"/></td>
<td>[信息標(biāo)題最多不得超過 40 個字符] </td>
</tr>
<tr> <td colspan="3"><s2:fielderror><s2:param value="%{'typeError'}"/></s2:fielderror></td></tr>
<tr>
<td>信息標(biāo)題:</td>
<td colspan="2"><s2:textfield name="infoSingle.infoTitle"/></td>
</tr>
<tr><td colspan="3"><s2:fielderror><s2:param value="%{'titleError'}"/></s2:fielderror></td></tr>
……//省略了實現(xiàn)其他表單字段的代碼
</s2:form>