正文

都市供求信息网(18)

JSP项目开发案例全程实录(第2版) 作者:明日科技


然后,创建处理类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>

 

上一章目录下一章

Copyright © 读书网 www.dushu.com 2005-2020, All Rights Reserved.
鄂ICP备15019699号 鄂公网安备 42010302001612号