正文

都市供求信息网(17)

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


1.8 信息发布模块设计

1.8.1 信息发布模块概述

单击页面顶部的“发布信息”超链接,将进入信息发布页面。在该页面中,用户可从下拉列表中选择一种信息类别(共包括11个信息类别:公寓信息、招聘信息、求职信息、培训信息、家教信息、房屋信息、车辆信息、求购信息、出售信息、招商引资、寻找启示),然后输入其他信息,如图1.38所示。

信息录入完整后,单击“发布”按钮,即可发布信息。此时,程序首先会验证用户是否输入了信息,若验证失败,则返回信息发布页面,进行相应提示;若验证成功,则会继续验证输入的联系电话和E-mail格式是否正确,若该验证成功,则向数据库中插入记录,完成发布操作。信息发布成功后,返回给用户信息的ID值。发布的信息还需要管理员进行审核,只有审核成功的信息才能显示在前台页面中。信息发布的流程如图1.39所示。

 

1.8.2 信息发布技术分析

信息发布技术所要实现的是将用户填写的数据保存到数据表中。要实现这样一个目的,首先要解决在Struts 2.0中如何获取表单数据以及如何验证表单数据的问题。下面分别进行介绍。

1.如何获取表单数据

在Struts 2.0中不存在与表单对应的ActionForm,而是直接在处理类中设置与表单字段相对应的属性,并为属性创建setXXX()与getXXX()方法来获取、返回表单数据。

下面以应用Struts 2.0实现一个简单的用户登录为例介绍如何获取表单数据。当用户输入的用户名为tsoft、密码为111时,则登录成功,返回到welcome.jsp页面,显示用户输入的用户名和密码。

首先,创建一个请求处理类LoginAction,表单请求被提交到该类中进行处理,为了能够获取表单数据,需要创建与表单字段对应的属性并设置它们的setXXX()与getXXX()方法。LoginAction类的具体代码如下:

package com.action;

import com.opensymphony.xwork2.ActionSupport;

public class LoginAction extends ActionSupport {

private String userName; //对应表单中的“用户名”字段

private String userPass; //对应表单中的“密码”字段

private String message; //用来保存提示消息

……//省略了属性的setXXX()与getXXX()方法

public String execute() {

if(userName.equals("tsoft")&&userPass.equals("111")) {

message="登录成功!";

return "yes";

}else{

message="登录失败!";

return "no";

}

}

}

然后,创建登录页面login.jsp,在该页面中应用Struts 2.0标签来创建一个Form表单、文本输入框、密码输入框和“登录”、“重置”按钮,运行效果如图1.40所示。

login.jsp页面的关键代码如下:

<%@ taglib uri="/struts-tags" prefix="s" %>

<s:form action="login.action" theme="simple">

<table border="0">

<tr>

<td>用户名:</td>

<td><s:textfield name="userName"/></td>

</tr>

<tr>

<td>密  码:</td>

<td><s:password name="userPass"/></td>

</tr>

</table>

</s:form>

代码贴士

form标签用于生成一个表单,其action属性指定请求路径,若该路径以“.action”为后缀,则会到Struts 2.0的配置文件中查找与之对应的配置,根据配置将请求转发给对应的Action类进行处理;将theme属性值设为simple,可以取消其默认的表格布局。

textfield标签表示文本输入框,其name属性指定了该文本框与表单处理类中对应的属性userName。实际上,textfield标签的name属性值并不是必须与处理类中的属性具有相同的名称。如上述代码,当表单提交后,会自动调用处理类中的setUserName()方法和setUserPass()方法将表单数据赋值给类中指定的属性,因此该属性的命名是任意的,如命名为myName。不过为了便于理解,通常情况下都是将属性与表单字段设置为相同的名称,读者也应按照该规则命名属性。

password标签表示密码输入框,其用法同textfield标签。

其次,在配置文件中对表单所请求的路径进行配置。配置代码如下:

<package name="login" extends="struts-default">

<action name="login" class="com.action.LoginAction">

<result name="yes">welcome.jsp</result> <!-- 配置登录成功后返回的页面 -->

<result name="no">welcome.jsp</result> <!-- 配置登录失败后返回的页面 -->

</action>

</package>

关于Struts 2.0配置文件的介绍,读者可查看1.14.2节。

接下来,创建登录操作后的提示页面welcome.jsp,在该页面中输出用户登录结果,并输出用户输入的用户名和密码。welcome.jsp页面的关键代码如下:

<%@ taglib uri="/struts-tags" prefix="s" %>

<b><s:property value="message"/></b>

<table>

<tr>

<td>

用户名:<b><s:property value="userName"/></b>--

密  码:<b><s:property value="userPass"/></b>

</td>

</tr>

</table>

welcome.jsp页面是从LoginAction处理类中进行请求转发来访问的,只有在这种情况下,property标签采用如上用法时,才能输出LoginAction类中message、userName和userPass属性的值;否则若是通过地址栏或超链接直接访问welcome.jsp页面,如上用法的property标签将不输出任何值。

最后,分别在“用户名”和“密码”文本框中输入“tsoft”和“111”,单击“登录”按钮,登录成功,并将出现如图1.41所示的运行结果。若输入的数据为“yxq”和“123”,则登录失败,出现如图1.42所示的运行结果。

图1.41 登录成功 图1.42 登录失败

Struts 2.0还允许将封装表单数据的代码从Action类中分离出来,写在另一个JavaBean中。例如,将上述例子进行如下修改。

首先,创建一个存储表单数据的JavaBean。代码如下:

package com.model;

public class User {

private String userName; //对应表单中的“用户名”字段

private String userPass; //对应表单中的“密码”字段

……//省略了属性的setXXX()与getXXX()方法

}


上一章目录下一章

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