频 道 直 达 - 新闻 - 培训 - 软件 - 教程 - 前沿 - 组网 - 系统应用 - 安全 - 编程 - 存储 - 操作系统 - 数据库 - 服务器 - 专题 - 产品 - 案例库 - 读书 - 博客 - BBS
51CTO.COM_中国最大的网络技术网站
找资料:

1.8.3 信息发布实现过程

作者: 周桓 出处:清华大学出版社  2008-07-04 17:11    砖    好    评论   进入论坛
阅读提示:《JSP项目开发全程实录》第1章都市供求信息网(Struts 2.0+SQL Server 2000实现),这一章通过应用Struts 2.0+SQL Server 2000开发一个流行的电子商务网站——都市供求信息网,本节为大家介绍信息发布实现过程。

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.12所示。

表1.12  信息发布页面所涉及的表单元素

   

   

addType

<input type="hidden">

name

通过该表单元素,
InfoAction
类的Add()
法判断要进行的操作

infoSingle.infoType

<s2:select>

namelist

信息类别下拉列表框

infoSingle.infoTitle

<s2:textfield>

name

信息标题

infoSingle.infoContent

<s2:textarea>

name

信息内容

infoSingle.infoPhone

<s2:textfield>

name

联系电话

infoSingle.infoLinkman

<s2:textfield>

name

联系人

infoSingle.infoEmail

<s2:textfield>

name

E-mial地址

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 个字符]&nbsp;&nbsp;</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>

代码贴士

select标签用来实现下拉列表框,emptyOption属性取值为true,表示第一个下拉列表项为空白,取值为false或省略该属性,则不生成空白列表项;list属性则指定用来生成下拉列表项的数据源,若该数据源是一个Map对象,则默认的会将该Map对象的key值作为列表项的值(在程序中使用),将value值作为列表项的标签(显示给用户);name 属性指定了与表单的处理类中对应的setXXX()与getXXX()方法。

fielderror标签用来输出通过Action类的addFieldError()方法保存的信息,param标签则指定要输出保存的哪条信息。如果要输出保存的全部信息,可使用<s2:fielderror/>。“%{}”用来计算表达式,被计算的表达式写在“{}”中,如<s2:property value="%{100+1}"/>,将输出“101”,所以,代码中为param标签的value属性指定的是字符串值typeError,若写为<s2:param value="typeError"/>,则此时的typeError相当于一个页面变量。例如:<s2:set name="myError" value="%{'typeError'}"/><s2:param value="myError"/>与<s2:param value="%{'typeError'}"/>实现的功能是相同的。

3.在InfoAction类中实现处理信息发布请求的方法

例程42中指定表单所触发的请求为info_Add.action,根据例程34中cityinfo.xml文件的配置,表单将被提交到InfoAction类的Add()方法中进行处理,在这之前需要进行表单验证。下面先来创建验证表单的方法。

创建验证表单的validateAdd()方法。

在该方法中,先获取表单数据,然后依次进行验证。首先验证用户输入是否为空,在都不为空的情况下,再来验证输入的“联系电话”和E-mail格式是否正确。在验证过程中,若验证失败,则调用addFieldError()方法保存提示信息。validateAdd()方法的代码如下:

例程43  代码位置:光盘\TM\01\src\com\yxq\action\InfoAction.java

public void validateAdd(){  
int type=infoSingle.getInfoType();      //获取信息类别表单数据
String title=infoSingle.getInfoTitle();      //获取信息标题表单数据
String content=infoSingle.getInfoContent();    //获取信息内容表单数据
String phone=infoSingle.getInfoPhone();     //获取联系电话表单数据
String linkman=infoSingle.getInfoLinkman();    //获取联系人表单数据
String email=infoSingle.getInfoEmail();     //获取E-mail地址表单数据
boolean mark=true;   
if(type<=0){
mark=false;
addFieldError("typeError",getText("city.info.no.infoType"));  
//getText(String key)方法用来获取properties                 资源文件
中key指定的键值存储的内容
}
……//省略了其他表单数据的验证
if(mark){       //若表单数据都不为空
……//省略了验证联系电话和E-mail格式的代码   
}
}

创建处理请求的Add()方法。

表单验证成功后,调用Add()方法处理请求。在该方法中先获取表单数据,然后生成SQL语句,最后调用OpDB类对象的OpUpdate()方法向数据表中插入记录,完成信息发布。Add()方法的代码如下:

例程44  代码位置:光盘\TM\01\src\com\yxq\action\InfoAction.java

public String Add(){  
String addType=request.getParameter("addType");     //获取访
问该方法的请求要进行的操作
if(addType==null||addType.equals("")){
request.setAttribute("mainPage","/pages/add/addInfo.jsp");
addType="linkTo";
}
if(addType.equals("add")){          //执行信息发布操作
request.setAttribute("mainPage","/pages/error.jsp");
OpDB myOp=new OpDB();  
Integer  type=Integer.valueOf(infoSingle.getInfoType());   //获取信息类别
String title=infoSingle.getInfoTitle();      //获取信息标题
String content=DoString.HTMLChange(infoSingle.getInfoContent()); //
转换信息内容中的HTML字符
String phone=infoSingle.getInfoPhone();     //获取联系电话
phone =  phone.replaceAll(",","●");      //替换“,”符号   
String linkman=infoSingle.getInfoLinkman();    //获取联系人
String email=infoSingle.getInfoEmail();     //获取E-mail地址
String date=DoString.dateTimeChange(new java.util.Date());  //
获取当前时间并转换为字符串格式 
String state="0";           //设置已审核状态为0
String payfor="0";          //设置已付费状态为0
Object[] params={type,title,content,linkman,phone,email,
date,state,payfor};
String sql="insert into tb_info values(?,?,?,?,?,?,?,?,?)";  
int i=myOp.OpUpdate(sql,params);    //调用业务对象的OpUpdate()
方法向数据表中插入记录
if(i<=0)             //操作失败
addFieldError("addE",getText("city.info.add.E"));   //保存失败提示信息
else {             //操作成功
sql="select * from tb_info where info_date=?";    //生成查
询刚刚发布信息的SQL语句
Object[] params1={date};    
int infoNum=myOp.OpSingleShow(sql, params1).getId();  //获取刚
刚发布信息的ID值
addFieldError("addS",getText("city.info.add.S")+infoNum);  //保
存成功提示信息
}
}  
return SUCCESS;
}

4.配置cityinfo.xml文件

对信息发布请求的配置,与列表显示某类别中所有信息请求的配置是同一个配置,可参看例程34。

【责任编辑:夏书 TEL:(010)68476606】

回书目   上一节   下一节
专题
初探敏捷开发
WCF开发基础
Visual Studio 2005开发基础
测试开发人员参考手册
Groovy开发技术
我也说两句

匿名发表

(如果看不清请点击图片进行更换)


中 国 最 大 的 网 络 技 术 网 站 ·
技 术 成 就 梦 想
订阅技术快讯
电子杂志下载
名称:SQL Server数据库管理精品黄皮书
简介:书中文章经过精挑细选,便于用户能根据自己的实际工作和学习,快速在本书寻找到相关资料。内容涵盖了SQL Server的安装与升级、语句查询、数据备份和恢复、自动化任务、数据同步、数据字典、安全和预防、性能和优化、集群等各方面应用信息,以及DBA管理人员在数据库管理工作中
名称:2007路由技术大全
简介:《2007路由技术大全》由51CTO.com网站特别策划制作,该书包括路由器技术、路由器产品、路由器配置、安全设置、路由器故障处理、路由器密码恢复,以及广大网友在实践使用中的心得经验和技巧文章,内容注重实用性,适用于初学者入门,也适合多年从业者提高,是一本实践和理论完
名称:网络安全精品应用黄皮书
简介:《2007精品网络安全黄皮书》包括了9个大类24个小类, 800余篇文章,内容包含了熊猫烧香病毒、DDOS攻击、ARP病等热点问题的介绍及解决方案。从病毒查杀、防范、系统、数据等各方面的安全设置到黑客技术的了解、防范,涉及到了安全应用的全部领域, 由浅至深内容全面。
文档格式标准开战 OOXML成国际标准
文档格式标准开战 OOXML成国..
云计算时代来临
云计算时代来临
CCNA备考指南与满分攻略
CCNA备考指南与满分攻略
· CCNA备考指南与满分攻略
· 浏览器的战国时代
· 世纪枭雄比尔盖茨的王..
· 路由器设置与口令恢复
· 微软出价446亿美元收购..
· IT工程师该不该考CCIE..
· 2008年上半年IT新闻热..
· 反垃圾邮件技术应用
· Windows远程桌面应用
· 运营商封堵ADSL共享 中..
· Vista SP1对决XP SP3
· 珊瑚虫QQ作者被判侵权..
· 勇闯IT培训黑色围城
· 2008年上半年IT技术图..
· 华为路由器配置
· 隐私保护技术探讨
ARP攻击防范与解决方案
ARP攻击防范与解决方案
SQL Server 2008/2005全解
SQL Server 2008/2005全解
SOA 面向服务架构
SOA 面向服务架构
· SOA 面向服务架构
· SQL Server 2008/2005..
· Apache技术专题
· 三层交换技术专题
· SQL Server入门到精通
· Windows远程桌面应用
· C#技术开发指南
· Apache技术专题
· Windows集群服务应用
· C#技术开发指南
· 文档格式标准开战 OOXM..
· 路由器设置与口令恢复
· Linux 集群技术专题
· PHP开发应用手册
· SOA 面向服务架构
· 企业数据恢复指南
ARP攻击防范与解决方案
ARP攻击防范与解决方案
SQL Server 2008/2005全解
SQL Server 2008/2005全解
SQL Server入门到精通
SQL Server入门到精通
· SQL Server入门到精通
· SQL Server 2008/2005..
· SOA 面向服务架构
· Apache技术专题
· C#技术开发指南
· 三层交换技术专题
· Apache技术专题
· C#技术开发指南
· Windows远程桌面应用
· 企业数据恢复指南
· Windows集群服务应用
· 路由器设置与口令恢复
· Linux 集群技术专题
· SOA 面向服务架构
· 了解统一威胁管理(UTM)..
· 反垃圾邮件技术应用