然后,创建处理类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”,运行结果如图1.41所示。
2.Struts 2.0中的表单验证
在Struts 2.0中可使用校验框架和Action类中的验证方法来对表单数据进行验证,本系统采用的是第二种方法。
Action类中的验证方法的命名规则为validateXXX(),其中XXX表示Action类中用来处理请求的某个方法名称。当请求被转发给Action类时,该Action会根据用户请求来调用相应的方法处理请求,若在这之前需要进行表单数据验证,则可实施与该方法对应的validateXXX()验证方法进行验证。
例如,本系统中用来处理前台操作的Action类中的Add()方法用来处理信息发布的请求,在Add()方法中需要编写向数据表中插入记录的代码,所以在这之前需要验证用户输入的表单数据是否为空,可在Action类中实现validateAdd()方法进行验证,验证成功后,会自动调用Add()方法。
validateXXX()验证方法不需要返回值,在方法中可将提示信息通过addFieldError()方法进行保存,这样,返回验证失败的提示页面后,就可通过fielderror标签输出提示信息。
Struts 2.0将根据是否调用了addFieldError()方法判断验证是否成功,若validateXXX()方法的程序流程执行了addFieldError()方法,则验证失败,那么在validateXXX()方法的流程结束后,将返回到配置文件中指定的JSP页面。
例如,本系统在配置文件中对登录操作进行的配置如下:
<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中解决中文乱码问题,可通过一种简单的方法给予实现。在应用的WEB-INF/classes目录下创建一个struts.properties资源文件,Struts 2.0会默认加载WEB-INF/classes目录下的该文件,在该文件中进行如下编码:
struts.i18n.encoding=gb2312
其中struts.i18n.encoding指定了Web应用默认的编码。
1.8.3 信息发布实现过程
信息发布用到的数据表:tb_info。
用户通过单击页面顶部的“发布信息”超链接,即进入信息发布页面,在该页面中填写发布信息后,提交表单,在InfoAction处理类中获取表单数据进行验证,验证成功后向数据表中插入数据,完成信息的发布。下面按照这个操作流程,介绍信息发布的实现过程。
1.实现页面顶部的“发布信息”超链接
在view目录下的top.jsp文件中实现进入信息发布页面的“发布信息”超链接。代码如下:
例程41 代码位置:光盘\TM\01\view\top.jsp
<a href="info_Add.action?addType=linkTo" style="color:gray">[发布信息]</a>
该超链接所请求的路径为info_Add.action,根据在Struts配置文件中的配置,由InfoAction类中的Add()方法处理该请求,参数addType通知Add()方法当前请求的操作,其值若为linkTo,表示仅仅是连接到信息发布页面;若为add,则表示向数据表中插入记录。
2.创建发布信息的addInfo.jsp页面
在信息发布页面中包含一个表单,该表单中的元素如表1.11所示。
addInfo.jsp页面的关键代码如下:
例程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>[信息标题最多不得超过 40 个字符] </td>
</tr>
<tr> <td colspan="3"><s2:fielderror><s2:param value="%{'typeError'}"/></s2:fielderror></td></tr>
<tr>
<td>信息标题:</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>
……//省略了实现其他表单字段的代码
</s2:form>