<?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>
string bookid;//图书id,对应t_book表的book_id,是主键。
string isbn;//isbn
string createdate;//创建日期
string bookname;//书名
string author;//作者
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所示:
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"/>
34. </td>
35. <td>
36. <bean:message bundle="bookstore" key="bookstore.isbn"/>
37. </td>
38. <td>
39. <html:text name="bookactionform" property="isbn"/>
40. </td>
41. </tr>
42. <tr>
43. <td>
44. <bean:message bundle="bookstore" key="bookstore.bookname"/>
45. </td>
46. <td>
47. <html:text name="bookactionform" property="bookname"/>
48. </td>
49. <td>
50. <bean:message bundle="bookstore" key="bookstore.author"/>
51. </td>
52. <td>
53. <html:text name="bookactionform" property="author"/>
54. </td>
55. </tr>
56. <tr align="center">
57. <td colspan="4">
58. <html:submit value="保存"/>
59. <html:reset value="取消"/>
60. </td>
61. </tr>
62. </table>
63. </html:form>
64. </body>
65. </html>
bookstore.bookid=/u56fe/u4e66idbookstore.isbn=isbnbookstore.bookname=_
/u56fe/u4e66/u540dbookstore.author=/u4f5c/u8005bookstore.dbaccess.error=_
/u6570/u636e/u5e93/u8bbf/u95ee/u9519/u8befbookstore.duplicate.bookid=_
/u56fe/u4e66/u7f16/u53f7/u548c/u6570/u636e/u5e93/u4e2d/u5df2/u6709/u7684/u7f16/u53f7/u91cd/u590d
bookstore.bookid=图书idbookstore.isbn=isbnbookstore.bookname=图书名bookstore.author=作者bookstore.dbaccess.error=数据库访问错误bookstore.duplicate.bookid=图书编号和数据库中已有的编号重复
提示:
jdk提供了一个将中文转换为unicode编码格式的工具native2ascii.exe,它位于<jdk>/bin/目录下。在dos命令窗口下,通过native2ascii -encoding gbk <源文件>
<目标文件>即可以完成转换。
注意:
在前文中,我们曾提到了jbuilder 2005的一个bug,即web模块中的类或资源有时得不到同步,需要手工将类和资源拷贝到对应的目录。如果你发现资源文件没有同步到web-inf/classes目录时,bookstoreresource_zh_cn.properties需要在编译工程后手工拷贝到这个目录下,否则struts就无法找到资源了。
创建bookinsertaction
下面,我们来创建bookinsertaction,在该action中将图书记录添加到t_book表中。如果操作成功定向到insertsuccess.htm操作成功页面,如果在进行数据库操作时发现sqlexception,则转向sqlfail.htm页面。我们需要事先创建这两个html页面,为了简单,仅在其中写入报告操作成功和失败的信息即可。
按3.2相似的方式创建bookinsertaction,用book-struts-config.xml记录配置信息,在向导的第2步,将formbean name指定为bookactionform,scope为request,将input jsp指定为/bookadd.jsp,如图 23所示:
1. package bookstore;
2.
3. import javax.servlet.http.*;
4. import org.apache.struts.action.*;
5. import java.sql.*;
6.
7. public class bookinsertaction
8. extends action {
9. public actionforward execute(actionmapping actionmapping,
10. actionform actionform,
11. httpservletrequest servletrequest,
12. httpservletresponse servletresponse)
13. throws exception
14. {
15. bookactionform bookactionform = (bookactionform) actionform;
16. connection conn = null;
17. conn = dbconnection.getconnection();
18. preparedstatement pstat = conn.preparestatement(
19. " insert into t_book1(book_id,isbn,book_name,author,"+
20. "create_date) values(?,?,?,?,?)");
21. pstat.setstring(1, bookactionform.getbookid());
22. pstat.setstring(2, bookactionform.getisbn());
23. pstat.setstring(3, bookactionform.getbookname());
24. pstat.setstring(4, bookactionform.getauthor());
25. pstat.setstring(5, bookactionform.getcreatedate());
26. pstat.executeupdate();
27. return actionmapping.findforward("success");
28.
29. }
30. }
1. …
2. <struts-config>
3. …
4. <global-exceptions>
5. <exception key="sqlexception" type="java.sql.sqlexception"
6. path="/sqlfail.htm"/>
7. </global-exceptions>
8. …
9. </struts-config>
新闻热点
疑难解答