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()方法
}