分享
 
 
 

JBuilder2005 Struts深度体验之新增

王朝other·作者佚名  2008-05-31
窄屏简体版  字體: |||超大  

新增一个Struts配置文件

考虑到图书模块是一个比较独立的模块,为了避免对Struts配置文件的资源争用导致团队工程的覆盖或冲突,我们为这个模块单独提供一个新的Struts配置文件,用这个配置文件配置图书模块所有Struts关联的信息。

我们按照如下的方式为webModule模块添加一个名为book-struts-config.xml的配置文件。

首先到<工程目录>/webModule/WEB-INF拷贝一个原有的struts-config.xml文件,更名为book-struts-config.xml放在struts-config.xml相同的目录下,删除原有配置的内容,将其调整成:

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN" "http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd">

<struts-config>

</struts-config>

然后,在工程窗格的资源树中定位到webModule->Deployment descriptors-><Struts 1.1>节点上,右击<Struts 1.1>节点,在弹出的菜单中选择PRoperties...弹出Properties for ’<Struts 1.1>’对话框,如图 16所示:

图 16 Struts配置文件维护对话框

点击Add...按钮,在弹出的Choose Struts config file对话框中选择book-struts-config.xml配置文件,按OK这个新的Struts配置文件将添加到Struts config file in web.xml列表中。

新增配置文件成功后,在工程窗格资源树的<Struts 1.1>节点下,你将会发现这个新加入的Struts配置文件,如下图所示:

图 17 两个Struts配置文件

这样,在创建新的FormBean或Action时,你就可以选择用哪个配置文件来保存Struts的配置信息了。

图书Action Form

下面我们着手创建用于接收新增图书页面表单数据的BookActionForm,使用book-struts-config.xml保存BookActionForm的配置信息。BookActionForm需要进行数据有效性自检,也就是说,要让BookActionForm实现validate()方法。

创建BookActionForm和创建UserActionForm相似,但是在向导的第1步需要指定book-struts-config.xml记录BookActionForm配置信息,如图 18所示:

图 18 选择不同的配置文件

我们在前一节为Web模块添加了一个配置文件,在Struts config下拉框中列出了Web模块所有配置文件,这里我们选择WEB-INF/book-struts-config.xml。

在向导的第2步,我们为BookActionForm定义下列5个属性:

String bookId;//图书ID,对应T_BOOK表的BOOK_ID,是主键。

String isbn;//isbn

String createDate;//创建日期

String bookName;//书名

String author;//作者

在向导的第2步直接按Finish创建BookActionForm。由于bookId属性是主键,所以不能和T_BOOK中已有的记录重复,这可以通过BookActionForm的数据自检机制来完成,数据自检是通过定义validate()方法来实现的。向导已经为BookActionForm生成了validate()方法框架,我们只需要在validate()方法编写bookId的校验的代码就可以了,BookActionForm的最终代码如代码清单 10所示:

代码清单 10 BookActionForm.java

1. package bookstore;

2.

3. import javax.servlet.http.HttpServletRequest;

4. import org.apache.struts.action.*;

5. import java.sql.*;

6.

7. public class BookActionForm

8. extends ActionForm {

9. …

10. public ActionErrors validate(ActionMapping actionMapping,

11. HttpServletRequest httpServletRequest) {

12. ActionErrors errors = new ActionErrors();

13. Connection conn = null;

14. try {

15. conn = DBConnection.getConnection();

16. PreparedStatement pStat = conn.prepareStatement(

17. "select count(*) count from T_BOOK where BOOK_ID=?");

18. pStat.setString(1, this.bookId);

19. ResultSet rs = pStat.executeQuery();

20. if (rs.next()&& rs.getInt(1) > 0) {

21. errors.add("bookId ",

22. new ActionMessage("bookstore.duplicate.bookId",

23. "图书ID和数据库中已经有的ID重复"));

24. }

25. }

26. catch (SQLException se) {

27. se.printStackTrace();

28. errors.add("bookId",

29. new ActionMessage("bookstore.dbaccess.error", "访问数据库时出错"));

30. }

31. finally {

32. try {

33. if (conn != null) {

34. conn.close();

35. }

36. }

37. catch (SQLException ex) {

38. ex.printStackTrace();

39. errors.add("bookId",

40. new ActionMessage("bookstore.dbaccess.error",

41. "访问数据库时出错"));

42. }

43. }

44. return errors;

45. }

46.

47. public void reset(ActionMapping actionMapping,

48. HttpServletRequest servletRequest) {

49. this.createDate = getCurrDateStr();

50. }

51.

52. //获取当前时间字符

53. private static String getCurrDateStr() {

54. SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");

55. return sdf.format(new Date());

56. }

57. }

当用户提交表单后,Struts框架自动把表单数据填充到ActionForm中,接着Struts框架自动调用ActionForm的validate()方法进行数据验证。假如validate()方法返回的ActionErrors为null或不包含任何ActionMessage对象,表示通过验证,Struts框架将ActionForm和HTTP请求一起传给Action的execute(),否则Struts框架将HTTP请求返回到输入的页面中,而输入页面即可通过<Html:errors>显示对应request域中的ActionErrors错误信息显示出来。

此外,我们在reset()方法中将createDate属性置为当前的日期,因为这个属性值不是通过页面表单提供的。

新增图书jsp页面

1.通过向导创建bookAdd.jsp

通过JSP向导创建bookAdd.jsp页面,在向导的第2步选择使用Struts1.1的struts-bean和struts-html标签,如图 19所示:

图 19 指定选用Struts标签

2.使用JBuilder的Struts标签构建JSP页面

你可以直接用拖拽的方法从JBuilder编辑器左边的标签库将Struts标签添加到JSP页面中,如图 20所示:

图 20 用拖拽的方式添加Struts标签

Struts的html标签可以完成和标准的HTML元素相同的功能,Struts提倡使用Struts html标签库,因为这些标签可以和Struts框架的其他组件紧密地联系起来。而Strtus的bean标签库可以访问已经存在的JavaBean及其属性,有一些bean标签还可以访问HTTP请求头信息及Web资源文件的信息。

我们希望用Struts的html标签库创建添加图书的表单,通过bean标签库访问Web资源文件作为表单组件前的标识文字。

bookAdd.jsp的最终代码如代码清单 11所示:

代码清单 11 bookAdd.jsp

1. <%@page contentType="text/html; charset=GBK" %>

2. <%@taglib uri="/WEB-INF/struts-bean.tld" prefix="bean"%>

3. <%@taglib uri="/WEB-INF/struts-html.tld" prefix="html"%>

4. <html>

5. <head>

6. <title>bookInsert</title>

7. <script language="Javascript" >

8. function mySubmit(form)

9. {

10. if(form.isbn.value == null form.isbn.value == "")

11. {

12. alert("图书的ISBN不答应为空");

13. return false;

14. }

15. if(form.bookName.value == null form.bookName.value == "")

16. {

17. alert("图书名不答应为空");

18. return false;

19. }

20. }

21. </script>

22. </head>

23. <body bgcolor="#ffffff">

24. <html:errors/>

25. <html:form action="/bookInsertAction.do" focus="bookId" method="post"

26. onsubmit="return mySubmit(this)" >

27. <table width="100%%" border="0">

28. <tr>

29. <td>

30. <bean:message bundle="bookstore" key="bookstore.bookId"/>

31. </td>

32. <td>

33. <html:text name="bookActionForm" property="bookId"/>

3

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有