首页 新闻 论坛 问答 博客 招聘 更多 ▼ 专栏 文摘 圈子 搜索 您还未登录 ! 我的应用 登录 注册 hhr-michael永久域名 http://hhr-michael.javaeye.com.struts2+hibernate3+spring2读书笔记5(类 ... | 用Java简单的读取pdf文件中的数据(转) 2010-05-20 struts2+hibernate3+spring2读书笔记4(数据校验器) 文章分类:Java编程 最近买了谢星星(阿蜜果)的企业应用架构设计-Struts2+Hibernate3+Spring2,想更好地学习与管理资料,现在在博客上写读书笔记,呵呵! 第5章 数据校验器 一.使用重写validate()方法进行手动校验 实例需求:Struts2中可通过在Action中重写ActionSupport类的validate()方法来完成Action中各方法的难证。 1. 建立工程(可参考前几章的建立,方法类似,需在web.xml文件中配置Struts2的FilterDispatcher) 2. 编写用户信息的pojo类:User.java 代码如下: Java代码 1. package amigo.struts.validation; 2. 3.import java.util.Date; 4. 5./* 6. * 用户信息的pojo类 7. * */ 8.public class User { 9. /**用户名*/ 10. private String username; 11. 12. /**密码*/ 13. private String password; 14. 15. /**性别*/ 16. private int gender; 17. 18. /**年龄*/ 19. private int age; 20. 21. /**生日*/ 22. private Date birthDate; 23. 24. /**联系电话*/ 25. private String tel; 26. 27. /**Email*/ 28. private String email; 29. 30. /**个人首页*/ 31. private String url; 32. 33. public String getUsername() { 34. return username; 35. } 36. 37. public void setUsername(String username) { 38. this.username = username; 39. } 40. 41. public String getPassword() { 42. return password; 43. } 44. 45. public void setPassword(String password) { 46. this.password = password; 47. } 48. 49. public int getGender() { 50. return gender; 51. } 52. 53. public void setGender(int gender) { 54. this.gender = gender; 55. } 56. 57. public int getAge() { 58. return age; 59. } 60. 61. public void setAge(int age) { 62. this.age = age; 63. } 64. 65. public Date getBirthDate() { 66. return birthDate; 67. } 68. 69. public void setBirthDate(Date birthDate) { 70. this.birthDate = birthDate; 71. } 72. 73. public String getTel() { 74. return tel; 75. } 76. 77. public void setTel(String tel) { 78. this.tel = tel; 79. } 80. 81. public String getEmail() { 82. return email; 83. } 84. 85. public void setEmail(String email) { 86. this.email = email; 87. } 88. 89. public String getUrl() { 90. return url; 91. } 92. 93. public void setUrl(String url) { 94. this.url = url; 95. } 96.} package amigo.struts.validation; import java.util.Date; /* * 用户信息的pojo类 * */ public class User { /**用户名*/ private String username; /**密码*/ private String password; /**性别*/ private int gender; /**年龄*/ private int age; /**生日*/ private Date birthDate; /**联系电话*/ private String tel; /**Email*/ private String email; /**个人首页*/ private String url; public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public int getGender() { return gender; } public void setGender(int gender) { this.gender = gender; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public Date getBirthDate() { return birthDate; } public void setBirthDate(Date birthDate) { this.birthDate = birthDate; } public String getTel() { return tel; } public void setTel(String tel) { this.tel = tel; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public String getUrl() { return url; } public void setUrl(String url) { this.url = url; } } 3. 编写注册的Action:RegAction.java 代码如下: Java代码 1.package amigo.struts.validation; 2. 3.import java.util.regex.Pattern; 4. 5.import javax.servlet.http.HttpServletRequest; 6. 7.import org.apache.struts2.interceptor.ServletRequestAware; 8. 9.import com.opensymphony.xwork2.ActionSupport; 10./* 11. * 使用validate()完成注册验证 12. * */ 13.public class RegAction extends ActionSupport implements ServletRequestAware { 14. private User user; 15. private HttpServletRequest request; 16. public User getUser() { 17. return user; 18. } 19. public void setUser(User user) { 20. this.user = user; 21. } 22. public HttpServletRequest getServletRequest() { 23. return request; 24. } 25. public void setServletRequest(HttpServletRequest request) { 26. this.request = request; 27. } 28. /* 29. * 重写validate()方法实现验证 30. * */ 31. 32. public void validate(){ 33. //非空验证与输入合法验证 34. if(user.getUsername()==null||"".equals(user.getUsername().trim())){ 35. this.addFieldError("user.username","用户名不能为空"); 36. }else if(user.getUsername()!=null&&!Pattern.matches("//w{5,50}",user.getUsername().trim())){ 37. this.addFieldError("user.username","用户名输入不合法,必须为长度为5-50的字母或数字"); 38. } 39. if(user.getPassword()==null||"".equals(user.getPassword().trim())) 40. { 41. this.addFieldError("user.password","密码不能为空"); 42. }else if(user.getPassword()!=null&&!Pattern.matches("//w{5,50}", user.getPassword().trim())){ 43. this.addFieldError("user.password","密码输入不合法,必须为长度为5-50的字母或数字"); 44. 45. } 46. if(user.getAge()<0||user.getAge()>130){ 47. this.addFieldError("user.age","年龄不合法"); 48. } 49. 50. } 51. public String execute(){ 52. return null; 53. 54. } 55.} package amigo.struts.validation; import java.util.regex.Pattern; import javax.servlet.http.HttpServletRequest; import org.apache.struts2.interceptor.ServletRequestAware; import com.opensymphony.xwork2.ActionSupport; /* * 使用validate()完成注册验证 * */ public class RegAction extends ActionSupport implements ServletRequestAware { private User user; private HttpServletRequest request; public User getUser() { return user; } public void setUser(User user) { this.user = user; } public HttpServletRequest getServletRequest() { return request; } public void setServletRequest(HttpServletRequest request) { this.request = request; } /* * 重写validate()方法实现验证 * */ public void validate(){ //非空验证与输入合法验证 if(user.getUsername()==null||"".equals(user.getUsername().trim())){ this.addFieldError("user.username","用户名不能为空"); }else if(user.getUsername()!=null&&!Pattern.matches("//w{5,50}",user.getUsername().trim())){ this.addFieldError("user.username","用户名输入不合法,必须为长度为5-50的字母或数字"); } if(user.getPassword()==null||"".equals(user.getPassword().trim())) { this.addFieldError("user.password","密码不能为空"); }else if(user.getPassword()!=null&&!Pattern.matches("//w{5,50}", user.getPassword().trim())){ this.addFieldError("user.password","密码输入不合法,必须为长度为5-50的字母或数字"); } if(user.getAge()<0||user.getAge()>130){ this.addFieldError("user.age","年龄不合法"); } } public String execute(){ return null; } } 4.编写注册页面:reg.jsp 代码如下: Java代码 1.<%@ page language="java" contentType="text/html; charset=UTF-8" 2. pageEncoding="UTF-8"%> 3.<%@taglib prefix="s" uri="/struts-tags"%> 4. 5. 6. 7.
8.
用户注册 9. 10. 11.
12.
13.
14.
18. 19.
20.
21.
22.
23.
24.
25.
26. 27. <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@taglib prefix="s" uri="/struts-tags"%>
用户注册
5.配置struts.xml文件 代码如下: Java代码 1. 4. 5.
6.
7.
8.
9.
/validation/reg.jsp
10.
11.
12.
/validation/reg.jsp
以上五步后,就完成了重写validate()方法进行手动校验了!呵呵! 二.使用重写validateXxx()方法进行手动校验(这个例子主要是实现在同一个action中实现不同的验证方法) 1. 编写用户信息的Action: UserAction.java 具体代码如下: Java代码 1. package amigo.struts.validation; 2. 3.import java.util.regex.Pattern; 4. 5.import com.opensymphony.xwork2.ActionSupport; 6. 7./** 8. * 使用validateXxx()方法完成注册验证 9. * */ 10. 11.public class UserAction extends ActionSupport { 12. private User user; 13. 14. public User getUser() { 15. return user; 16. } 17. 18. public void setUser(User user) { 19. this.user = user; 20. } 21. /** 22. * 验证用户信息注册表单 23. * */ 24. public void validateReg(){ 25. //非空验证与输入合法验证 26. if(user.getUsername()==null||"".equals(user.getUsername().trim())){ 27. this.addFieldError("user.username","用户名不能为空"); 28. }else if(user.getUsername()!=null&&!Pattern.matches("//w{5,50}",user.getUsername().trim())){ 29. this.addFieldError("user.username","用户名输入不合法,必须为长度为5-50的字母或数字"); 30. } 31. if(user.getPassword()==null||"".equals(user.getPassword().trim())) 32. { 33. this.addFieldError("user.password","密码不能为空"); 34. }else if(user.getPassword()!=null&&!Pattern.matches("//w{5,50}", user.getPassword().trim())){ 35. this.addFieldError("user.password","密码输入不合法,必须为长度为5-50的字母或数字"); 36. 37. } 38. if(user.getAge()<0||user.getAge()>130){ 39. this.addFieldError("user.age","年龄不合法"); 40. } 41. } 42. public void validateLogin(){ 43. //非空验证与输入合法验证 44. if(user.getUsername()==null||"".equals(user.getUsername().trim())){ 45. this.addFieldError("user.username", "用户名不能为空!"); 46. } 47. if(user.getPassword()==null||"".equals(user.getPassword().trim())){ 48. this.addFieldError("user.password", "密码不能为空!"); 49. } 50. 51. } 52. /** 53. * 用户完成注册 54. * */ 55. public String reg(){ 56. //实现代码省略 57. return null; 58. } 59. 60. public String login(){ 61. //实现代码省略 62. return null; 63. } 64. public String execute(){ 65. return null; 66. } 67. 68.} package amigo.struts.validation; import java.util.regex.Pattern; import com.opensymphony.xwork2.ActionSupport; /** * 使用validateXxx()方法完成注册验证 * */ public class UserAction extends ActionSupport { private User user; public User getUser() { return user; } public void setUser(User user) { this.user = user; } /** * 验证用户信息注册表单 * */ public void validateReg(){ //非空验证与输入合法验证 if(user.getUsername()==null||"".equals(user.getUsername().trim())){ this.addFieldError("user.username","用户名不能为空"); }else if(user.getUsername()!=null&&!Pattern.matches("//w{5,50}",user.getUsername().trim())){ this.addFieldError("user.username","用户名输入不合法,必须为长度为5-50的字母或数字"); } if(user.getPassword()==null||"".equals(user.getPassword().trim())) { this.addFieldError("user.password","密码不能为空"); }else if(user.getPassword()!=null&&!Pattern.matches("//w{5,50}", user.getPassword().trim())){ this.addFieldError("user.password","密码输入不合法,必须为长度为5-50的字母或数字"); } if(user.getAge()<0||user.getAge()>130){ this.addFieldError("user.age","年龄不合法"); } } public void validateLogin(){ //非空验证与输入合法验证 if(user.getUsername()==null||"".equals(user.getUsername().trim())){ this.addFieldError("user.username", "用户名不能为空!"); } if(user.getPassword()==null||"".equals(user.getPassword().trim())){ this.addFieldError("user.password", "密码不能为空!"); } } /** * 用户完成注册 * */ public String reg(){ //实现代码省略 return null; } public String login(){ //实现代码省略 return null; } public String execute(){ return null; } } 2. 编写注册页面: validateXxxReg.jsp 具体代码如下: Java代码 1. <%@ page language="java" contentType="text/html; charset=UTF-8" 2. pageEncoding="UTF-8"%> 3.<%@taglib prefix="s" uri="/struts-tags"%> 4. 5. 6. 7.
8.
用户注册 9. 10. 11.
12.
13.
14.
18. 19.
20.
21.
22.
23.
24.
25.
26. 27. <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@taglib prefix="s" uri="/struts-tags"%>
用户注册
3. 编写登录页面:validateXxxLogin.jsp 具体代码如下: Java代码 1.<%@ page language="java" contentType="text/html; charset=UTF-8" 2. pageEncoding="UTF-8"%> 3.<%@ taglib prefix="s" uri="/struts-tags" %> 4. 5. 6. 7.
8.
用户登录 9. 10. 11.
12.
13.
14.
15.
16. 17. <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="s" uri="/struts-tags" %>
用户登录
4. 配置 sturts.xml Java代码 1. 4. 5.
6.
7.
8.
9.
/validation/reg.jsp
10.
11. 12.
13.
/validation/validateXxxReg.jsp
14.
15. 16.
17.
/validation/validateXxxLogin.jsp
18.
19. 20.
21.
/validation/reg.jsp
/validation/validateXxxReg.jsp
/validation/validateXxxLogin.jsp
以上四步后,就完成了重写validateXxx()方法进行手动校验了!呵呵!下面我们再来看看Struts2的验证框架。 三.使用Struts2的验证框架完成服务端校验 1.编写Action类:ValjFrameworkRegAction.java Java代码 1. package amigo.struts.validation; 2. 3.import com.opensymphony.xwork2.ActionSupport; 4./** 5. * 使用Struts2的验证框架完成数据校验 6. * */ 7.public class ValFrameworkRegAction extends ActionSupport { 8. private User user; 9. 10. public User getUser() { 11. return user; 12. } 13. 14. public void setUser(User user) { 15. this.user = user; 16. } 17. public String execute(){ 18. return null; 19. 20. } 21.} package amigo.struts.validation; import com.opensymphony.xwork2.ActionSupport; /** * 使用Struts2的验证框架完成数据校验 * */ public class ValFrameworkRegAction extends ActionSupport { private User user; public User getUser() { return user; } public void setUser(User user) { this.user = user; } public String execute(){ return null; } } 2.编写验证文件: ValFrameworkRegAction-validsation.xml Struts 2 中的每个Action都可以有一个验证文件,该验证文件与Action处于同目录中,命名格式为:Action的名称-validation.xml,其中“-validation.xml”是确定的,而“Action的名称”会根椐不同的Action而有所不同,本实例的验证文件的名称为:ValFrameworkRegAction-validsation.xml 具体内容如下: Java代码 1.
2. 5.
6.
7.
8.
true 9.
用户名不能为空
10.
11.
12.
13.
用户名输入不合法,必须为长度为5-50之间的字母或数字
14.
15. 16.
17. 18.
19.
20.
true 21.
密码不能为空
22.
23.
24.
25.
密码输入不合法,必须为长度为5-50之间的字母或数字
26.
27.
28. 29.
30.
31.
1 32.
130 33.
年龄输入不合法
34.
35.
36. 37.
true
用户名不能为空
用户名输入不合法,必须为长度为5-50之间的字母或数字
true
密码不能为空
密码输入不合法,必须为长度为5-50之间的字母或数字
1
130
年龄输入不合法
3. 编写注册页面:valFrameworkReg.jsp Java代码 1.<%@ page language="java" contentType="text/html; charset=UTF-8" 2. pageEncoding="UTF-8"%> 3.<%@taglib prefix="s" uri="/struts-tags"%> 4. 5. 6. 7.
8.
用户注册 9. 10. 11.
12.
13.
14.
18. 19.
20.
21.
22.
23.
24.
25.
26. 27. <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@taglib prefix="s" uri="/struts-tags"%>
用户注册
4.配置struts.xml,添加的信息如下: Java代码 1.
2.
/validation/valFrameworkReg.jsp
3.
/validation/valFrameworkReg.jsp
以上四步后,就完成了Struts2的验证框架服务端的校验了!呵呵!下面我们再来看看客户端的校验。 四.使用Struts2的验证框架完成客户端校验 在Strut2中,进行客户端校验将由框架在页面中自动生成javascript代码,在提交时调用自动生成的javascript代码中的函数:validateForm_Action 名称(),要实现客户端校验比较简单,只要在jsp页面的form的validate属性设为true就可以了。如下: Java代码 1.
五.国际化校验的提示信息 主要是实现验证信息的国际化:步骤如下: 1. 在src目录中创建校验提示信息的配置文件 Java代码 1.validationMessages.properties 2. 3.user.username.requried=用户名不能为空 4.user.username.regex=用户名输入不合法,必须为长度为5-50之间的字母或数字 5.user.password.requried=密码不能为空 6.user.password.regex=密码输入不合法,必须为长度为5-50之间的字母或数字 7.user.age=年龄必须在${min}和${max}}之间! 8. 9. 10. validationMessages_zh_CN.properties 11. user.username.requried=/u7528/u6237/u540d/u4e0d/u80fd/u4e3a/u7a7a 12.user.username.regex=/u7528/u6237/u540d/u8f93/u5165/u4e0d/u5408/u6cd5/uff0c/u5fc5/u987b/u4e3a/u957f/u5ea6/u4e3a5-50/u4e4b/u95f4/u7684/u5b57/u6bcd/u6216/u6570/u5b57 13.user.password.requried=/u5bc6/u7801/u4e0d/u80fd/u4e3a/u7a7a 14.user.password.regex=/u5bc6/u7801/u8f93/u5165/u4e0d/u5408/u6cd5/uff0c/u5fc5/u987b/u4e3a/u957f/u5ea6/u4e3a5-50/u4e4b/u95f4/u7684/u5b57/u6bcd/u6216/u6570/u5b57 15.user.age=/u5e74/u9f84/u5fc5/u987b/u5728${min}/u548c${max}}/u4e4b/u95f4/uff01 validationMessages.properties user.username.requried=用户名不能为空 user.username.regex=用户名输入不合法,必须为长度为5-50之间的字母或数字 user.password.requried=密码不能为空 user.password.regex=密码输入不合法,必须为长度为5-50之间的字母或数字 user.age=年龄必须在${min}和${max}}之间! validationMessages_zh_CN.properties user.username.requried=/u7528/u6237/u540d/u4e0d/u80fd/u4e3a/u7a7a user.username.regex=/u7528/u6237/u540d/u8f93/u5165/u4e0d/u5408/u6cd5/uff0c/u5fc5/u987b/u4e3a/u957f/u5ea6/u4e3a5-50/u4e4b/u95f4/u7684/u5b57/u6bcd/u6216/u6570/u5b57 user.password.requried=/u5bc6/u7801/u4e0d/u80fd/u4e3a/u7a7a user.password.regex=/u5bc6/u7801/u8f93/u5165/u4e0d/u5408/u6cd5/uff0c/u5fc5/u987b/u4e3a/u957f/u5ea6/u4e3a5-50/u4e4b/u95f4/u7684/u5b57/u6bcd/u6216/u6570/u5b57 user.age=/u5e74/u9f84/u5fc5/u987b/u5728${min}/u548c${max}}/u4e4b/u95f4/uff01 2.修改struts.xml文件 在struts的头部添加如下代码(注是在struts的标签内添加): Java代码 1.
2.
3. 修改校验文件 valFrameworkRegAction-validation.xml 内容如下: Java代码 1.
2. 5.
6.
7.
8.
true 9.
10.
${getText("user.username.requried")}
11.
12.
13.
14.
15.
${getText("user.username.regex")}
16.
17. 18.
19. 20.
21.
22. 23.
true 24.
25.
${getText("user.password.requried")}
26.
27. 28.
29.
30.
31.
${getText("user.password.regex")}
32.
33.
34. 35.
36.
37.
1 38.
130 39.
40.
${getText("user.age")}
41. 42.
43.
44. 45.
true
${getText("user.username.requried")}
${getText("user.username.regex")}
true
${getText("user.password.requried")}
${getText("user.password.regex")}
1
130
${getText("user.age")}
以上三步后,就完成了国际化的验证校验了! 六.常用内建的较验器 1. 必填字符串校验器requiredstring Java代码 1.字段校验器 2.
3.
4.
true 5.
用户名不能为空
6.
7.
非字段校验器 8.
9.
user.name 10.
true 11.
用户名不能为空
12.
字段校验器
true
用户名不能为空
非字段校验器
user.name
true
用户名不能为空
2.整数范围校验器 int filedName:用于非字段校验器,指定需要验证的属性名。 Min: 可选参数,用于指定整数最小值 Max:可选参数,用于指定最大值。 Java代码 1.字段校验器 2.
3.
4.
1 5.
130 6.
年龄输入不合法
7.
8.
9. 10. 非字段校验器 11. 12.
13.
user.age 14.
1 15.
130 16.
年龄输入不合法
17.
字段校验器
1
130
年龄输入不合法
非字段校验器
user.age
1
130
年龄输入不合法
3.正则表达式校验器 Fieldname:非字段校验器具有该属性,指定Action属必名。 Expression:必填,指定正则表达式 caseSensitive:非必填,指定是否区分大小写,默认为true. Java代码 1.字段校验器 2.
3.
4.
5.
用户名输入不合法,必须为长度为5-50之间的字母或数字
6.
7.
8. 9.非字段校验器 10.
11.
user.username 12.
13.
用户名输入不合法,必须为长度为5-50之间的字母或数字
14.
字段校验器
用户名输入不合法,必须为长度为5-50之间的字母或数字
非字段校验器
user.username
用户名输入不合法,必须为长度为5-50之间的字母或数字
4.必填校验器 Java代码 1. 字段校验器 2.
3.
4.
用户名不能为空
5.
6.
7. 8. 非字段校验器 9.
10.
user.name 11.
用户名不能为空
12.
字段校验器
用户名不能为空
非字段校验器
user.name
用户名不能为空
5.字符串度度校验器 Java代码 1. 字段校验器 2. 3.
4.
5.
5 6.
50 7.
用户名长度必须在5-50之间
8.
9.
10. 11.非字段校验器 12. 13. < validator type=”stringlength”> 14.
user.username 15.
5 16.
50 17.
用户名长度必须在5-50之间
18. 字段校验器
5
50
用户名长度必须在5-50之间
非字段校验器 < validator type=”stringlength”>
user.username
5
50
用户名长度必须在5-50之间
6.日期校验器 Java代码 1. 字段校验器 2.
3.
4.
1850-01-01 5.
2015-07-20 6.
出生日期输入不合法
7.
8.
9. 10. 11.非字段校验器 12. < validator type="date"> 13.
user.birthDate 14.
1850-01-01 15.
2015-07-20 16.
出生日期输入不合法
17.
字段校验器
1850-01-01
2015-07-20
出生日期输入不合法
非字段校验器 < validator type="date">
user.birthDate
1850-01-01
2015-07-20
出生日期输入不合法
7.网址校验器 Java代码 1.字段校验器 2.
3.
4.
个人首页输入不合法
5.
6.
7.非字段校验器 8. < validator type="url"> 9.
user.url 10.
个人首页输入不合法
11. 字段校验器
个人首页输入不合法
非字段校验器 < validator type="url">
user.url
个人首页输入不合法
8.邮件地址校验器 Java代码 1.字段校验器 2.
3.
4.
Email地址不合法
5.
6.
7. 8.非字段校验器 9. < validator type="email"> 10.
user.email 11.
Email地址不合法
12. 字段校验器
Email地址不合法
非字段校验器 < validator type="email">
user.email
Email地址不合法
struts2+hibernate3+spring2读书笔记5(类 ... | 用Java简单的读取pdf文件中的数据(转) 17:05浏览 (70)评论 (5)分类: struts+hibernate+spring學習相关推荐评论 5 楼 lixia0417 2010-05-27 引用 恩,LZ,谢谢了,那我还是练习把SSh的例子改成S2sh的吧,呵呵,哎,现在s2sh整合开发的例子还真是有点少啊,大都是SSh的,呵呵 4 楼 hhr_michael 2010-05-26 引用 哥们,你好,这本书着重s2sh的各个部分开发,而整合的例子不是很多,只有三章是整合的例子,且都是很基础的。 3 楼 lixia0417 2010-05-26 引用 对,哥们,问一下,这本书中关于S2SH整合开发的例子多吗,就是用三个框架一起开发的例子,想多练习一下,买本书,呵呵 2 楼 hhr_michael 2010-05-25 引用 谢谢提醒,由于只是着重校验的过程,所以这代码没有在struts.xml中配置对应的视图。 1 楼 lixia0417 2010-05-25 引用 楼主写得不错,受教了, 不过觉得
public String reg(){ //实现代码省略 return null; } public String login(){ //实现代码省略 return null; } public String execute(){ return null; }
返回空,有点怪怪的,还不如直接返回“success”呢,虽然在Struts.xml中没有配置对应的视图页面;发表评论 表情图标 字体颜色: 标准深红红色橙色棕色黄色绿色橄榄青色蓝色深蓝靛蓝紫色灰色白色黑色 字体大小: 标准1 (xx-small)2 (x-small)3 (small)4 (medium)5 (large)6 (x-large)7 (xx-large) 对齐: 标准居左居中居右 提示:选择您需要装饰的文字, 按上列按钮即可添加上相应的标签.您还没有登录,请登录后发表评论(快捷键 Alt+S / Ctrl+Enter) hhr_michael 浏览: 4761 次 性别: 来自: 惠州 详细资料 留言簿 搜索本博客 最近访客 >>更多访客 qljobswpfwupengfeiwpf土豆皮mianhuatangone.博客分类 ■全部博客 (45) ■java學習 (15) ■PHP學習 (2) ■javascript (12) ■vba excel (1) ■英語學習 (1) ■k3安裝與配置 (1) ■html學習 (1) ■struts+hibernate+spring學習 (11) ■数据库学习 (1) 我的留言簿 >>更多留言 ■漂过 -- by xw302 其他分类 ■我的收藏 (0) ■我的论坛主题贴 (0) ■我的所有论坛贴 (0) ■我的精华良好贴 (0) 最近加入圈子 存档 ■2010-06 (7) ■2010-05 (6) ■2010-03 (1) ■更多存档... 最新评论 ■struts2+hibernate3+sprin ... 恩,LZ,谢谢了,那我还是练习把SSh的例子改成S2sh的吧,呵呵,哎,现在s2s ... -- by lixia0417 ■struts2+hibernate3+sprin ... 哥们,你好,这本书着重s2sh的各个部分开发,而整合的例子不是很多,只有三章是整合 ... -- by hhr_michael ■struts2+hibernate3+sprin ... 对,哥们,问一下,这本书中关于S2SH整合开发的例子多吗,就是用三个框架一起开发的 ... -- by lixia0417 ■struts2+hibernate3+sprin ... 谢谢提醒,由于只是着重校验的过程,所以这代码没有在struts.xml中配置对应的 ... -- by hhr_michael ■struts2+hibernate3+sprin ... 楼主写得不错,受教了, 不过觉得
public Stri ... -- by lixia0417 评论排行榜 ■struts2+hibernate3+spring2读书笔记4(数据 ... ■js生成行,刪除行,復制行 ■struts2+hibernate3+spring2读书笔记11( ... ■JSP环境配置使用fckeditor ■struts2+hibernate3+spring2读书笔记10( ... [什么是RSS?] . -------------------------------------------------------------------------------- 声明:JavaEye文章版权属于作者,受法律保护。没有作者书面许可不得转载。若作者同意转载,必须以超链接形式标明文章原始出处和作者。 ? 2003-2010 JavaEye.com. All rights reserved. 上海炯耐计算机软件有限公司 [ 沪ICP备05023328号 ] .