- 浏览: 559157 次
文章分类
- 全部博客 (235)
- 数据库 (12)
- j2se (10)
- JQuery (2)
- 经验总结 (4)
- 防毒 (1)
- Struts (20)
- Spring (12)
- 项目 (3)
- 电脑维修项目 (1)
- Eclipse (2)
- JSP (13)
- mysql (5)
- Hibernate (54)
- ssh (1)
- 学习网站 (1)
- tomcat (9)
- servlet (24)
- java语言基础 (1)
- jbpm (1)
- linux (0)
- 技巧积累 (1)
- javaBean (2)
- 设计模式 (2)
- 实用的操作 (9)
- oracle (1)
- UML学习 (1)
- 版本控制 (1)
- 框架 (9)
- javaWeb基础 (13)
- c语言 (0)
- ant (0)
- 关于权限 (3)
- 真正开发有用 (5)
- javascript (2)
- 算法 (1)
- J2EE (1)
- junit (1)
最新评论
-
alleni123:
不错 一搜就搜到这个了
ssession和servletContext的比较 -
hua7381:
楼主,你真实帮了大忙了!!
万能乱码处理---url传中文 -
albrich:
1楼是正解
摘] 装了个Tomcat遇到的问题 -
JA_mcj:
ssession和servletContext的比较 -
haotw:
看了很有帮助,总算对hibernate的延迟加载有一定的了解了 ...
[转]hibernate延迟加载
ActionForm是表單的物件化,有關於表單資料的完整性檢查工作該在其中進行,例如使用者是否填寫了所有的欄位,ActionForm中所有的屬性是否被設定了,您可以重新定義ActionForm的validate()方法來進行這項工作,例如:
代碼:
package onlyfun.caterpillar;
import javax.servlet.http.*;
import org.apache.struts.action.*;
public class UserForm extends ActionForm {
protected String name;
protected String password;
public void setName(String name) {
this.name = name;
}
public void setPassword(String password) {
this.password = password;
}
public String getName() {
return name;
}
public String getPassword() {
return password;
}
public void reset(ActionMapping mapping, HttpServletRequest req) {
name = null;
password = null;
}
public ActionErrors validate(ActionMapping mapping,
HttpServletRequest request) {
ActionErrors errors = new ActionErrors();
if(getName() == null || getUsername().length() < 1) {
errors.add("name",new ActionError("error.name.required"));
}
if(getPassword() == null || getPassword().length() < 1) {
errors.add("password",new ActionError("error.password.required"));
}
return errors;
}
}
當使用者發送表單,而表單中有欄位沒有填寫時,則請求中會包括參數名稱,但是值為空字串,如果ActionForm具有某些屬性,而表單並沒有發送對應的參數,則不會設定ActionForm中對應的屬性,這些屬性將為null,我們的validate()中主要在檢查這兩個情況。
validate()方法會傳回ActionErrors物件,ActionErrors可以儲存ActionError的訊息,每一個ActionError會查詢資源檔中的key-value對應,當validate()丟回ActionErrors物件時,ActionServlet就不會繼續進行接下來的工作,而是導回structs-config.xml所設定的位置,例如:
代碼:
<global-forwards>
<forward
name="welcome"
path="/Welcome.do"/>
</global-forwards>
<form-beans>
<form-bean
name="userForm"
type="onlyfun.caterpillar.UserForm"/>
</form-beans>
<action-mappings>
<action
path="/Welcome"
type="org.apache.struts.actions.ForwardAction"
parameter="/pages/Welcome.jsp"/>
<action
path="/LoginAction"
type="onlyfun.caterpillar.LoginAction"
name="userForm"
validate="true"
input="/pages/Welcome.jsp">
<forward name="greeting" path="/pages/greeting.jsp"/>
</action>
</action-mappings>
為了要能使用validate()方法,<action>中的validate屬性必須設定為true,而input屬性也是必要的,當validate()傳回ActionErrors時,就會forward至input屬性所設定的位置,ActionErrors中的訊息,我們可以使用<html:errors/>標籤來顯示,待會就會看到。
ActionForm中驗證了屬性為null及空字串的可能,這是資料完整性的驗證,接下來我們要驗證資料的正確性,是否符合我們所設定的名稱與密碼,我們改寫前一個主題的LoginAction,看看寫法有何不同:
代碼:
package onlyfun.caterpillar;
import javax.servlet.http.*;
import org.apache.struts.action.*;
import org.apache.commons.beanutils.*;
public class LoginAction extends Action {
public ActionForward execute(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws Exception {
String name = (String) PropertyUtils.getSimpleProperty(form, "name");
String password = (String) PropertyUtils.getSimpleProperty(form, "password");
if(!(name.equals("caterpillar") && password.equals("1234"))) {
ActionMessages messages = new ActionMessages();
messages.add(ActionMessages.GLOBAL_MESSAGE,
new ActionMessage("message.namepass.notmatched"));
saveMessages(request, messages);
return mapping.findForward("welcome");
}
else {
request.getSession().setAttribute("valid_user", form);
return mapping.findForward("greeting");
}
}
}
在這次的程式中,我們使用了org.apache.commons.beanutils中的PropertyUtils類別來協助我們取ActionForm中的值,好處是不用理會ActionForm真正的形態,PropertyUtils會自動幫我們判斷,getSimpleProperty()傳回的是Object,我們將之轉換為String。
ActionMessages是Struts 1.1所新增的類別,它變成了ActionErrors的父類別,同樣的,ActionMessage也是Struts 1.1新增的類別,它是ActionError的父類別,資料的格式與完整性檢查在ActionForm中我們已經驗證了,接下來我們在Action中檢查是否符合名稱與密碼,如果不符合就加入相關的訊息。
在Struts 1.1中特意將Message與Error區別,該是認定所謂的Error是使用者的輸入在完整性或格式等上有誤,而Message是指輸入的資料基本上沒有錯誤,但不能符合後續的商務處理。
為了要能夠顯示錯誤與訊息,我們必須在application_zh.properties中加入key-value對應,如下:
代碼:
# -- error --
error.name.required=沒有輸入名稱
error.password.required=沒有輸入密碼
#-- message --
message.namepass.notmatched=名稱與密碼不正確
為了要能使用中文,記得使用native2ascii工具程式進行轉換,接下來我們來看看我們的Welcome.jsp如何撰寫,要注意的是在<html:errors/>與<htm:messages/>的使用:
代碼:
<%@ taglib uri="/tags/struts-bean" prefix="bean" %>
<%@ taglib uri="/tags/struts-html" prefix="html" %>
<%@page contentType="text/html; charset=Big5"%>
<html:html locale="true">
<head>
<title><bean:message key="welcome.title"/></title>
<html:base/>
</head>
<body bgcolor="white">
<html:errors/>
<html:messages id="messages" message="true">
<bean:write name="messages"/>
</html:messages>
<h3>請登入</h3>
<html:form action="/Login">
名稱:<html:text property="name" size="20"/><br>
密碼:<html:password property="password" size="20"/><br>
<html:submit/> <html:reset/>
</html:form>
</body>
</html:html>
如果由於ActionForm傳回ActionErrors物件而返回Welcome.jsp,則<html:errors/>標籤會顯示ActionErrors中的相關錯誤訊息,我們利用<html:messages/>來檢查返回中是否也包括ActionMessages物件,如果有的話就取出並使用<bean:write/>標籤顯示之。
下面是執行時未填寫欄位所顯示的錯誤訊息的一個例子:
代碼:
<html lang="zh">
<head>
<title>哈囉!Struts!</title>
<base href="http://localhost:8080/HelloStruts/pages/Welcome.jsp">
</head>
<body bgcolor="white">
<UL>
<LI>沒有輸入名稱
</LI><LI>沒有輸入密碼
</LI></UL>
<h3>請登入</h3>
<form name="UserForm" method="post" action="/HelloStruts/Login.do">
名稱:<input type="text" name="name" size="20" value=""><br>
密碼:<input type="password" name="password" size="20" value=""><br>
<input type="submit" value="Submit"> <input type="reset" value="Reset">
</form>
</body>
</html>
注意到ActionErrors在Struts 1.2之後可能會被標示為deprecated,將來可能會改以ActionMessages取代,所以<html:errors/>在將來必須以下面的方式來取代:
代碼:
<html:messages id="msg" >
<bean:write name="msg"/>
</html:messages>
在之前的例子中,在<html:messages/>的屬性上設定message為true,這表示顯示ActionMessages的內容:
代碼:
<html:messages id="messages" message="true">
<bean:write name="messages"/>
</html:messages>
代碼:
package onlyfun.caterpillar;
import javax.servlet.http.*;
import org.apache.struts.action.*;
public class UserForm extends ActionForm {
protected String name;
protected String password;
public void setName(String name) {
this.name = name;
}
public void setPassword(String password) {
this.password = password;
}
public String getName() {
return name;
}
public String getPassword() {
return password;
}
public void reset(ActionMapping mapping, HttpServletRequest req) {
name = null;
password = null;
}
public ActionErrors validate(ActionMapping mapping,
HttpServletRequest request) {
ActionErrors errors = new ActionErrors();
if(getName() == null || getUsername().length() < 1) {
errors.add("name",new ActionError("error.name.required"));
}
if(getPassword() == null || getPassword().length() < 1) {
errors.add("password",new ActionError("error.password.required"));
}
return errors;
}
}
當使用者發送表單,而表單中有欄位沒有填寫時,則請求中會包括參數名稱,但是值為空字串,如果ActionForm具有某些屬性,而表單並沒有發送對應的參數,則不會設定ActionForm中對應的屬性,這些屬性將為null,我們的validate()中主要在檢查這兩個情況。
validate()方法會傳回ActionErrors物件,ActionErrors可以儲存ActionError的訊息,每一個ActionError會查詢資源檔中的key-value對應,當validate()丟回ActionErrors物件時,ActionServlet就不會繼續進行接下來的工作,而是導回structs-config.xml所設定的位置,例如:
代碼:
<global-forwards>
<forward
name="welcome"
path="/Welcome.do"/>
</global-forwards>
<form-beans>
<form-bean
name="userForm"
type="onlyfun.caterpillar.UserForm"/>
</form-beans>
<action-mappings>
<action
path="/Welcome"
type="org.apache.struts.actions.ForwardAction"
parameter="/pages/Welcome.jsp"/>
<action
path="/LoginAction"
type="onlyfun.caterpillar.LoginAction"
name="userForm"
validate="true"
input="/pages/Welcome.jsp">
<forward name="greeting" path="/pages/greeting.jsp"/>
</action>
</action-mappings>
為了要能使用validate()方法,<action>中的validate屬性必須設定為true,而input屬性也是必要的,當validate()傳回ActionErrors時,就會forward至input屬性所設定的位置,ActionErrors中的訊息,我們可以使用<html:errors/>標籤來顯示,待會就會看到。
ActionForm中驗證了屬性為null及空字串的可能,這是資料完整性的驗證,接下來我們要驗證資料的正確性,是否符合我們所設定的名稱與密碼,我們改寫前一個主題的LoginAction,看看寫法有何不同:
代碼:
package onlyfun.caterpillar;
import javax.servlet.http.*;
import org.apache.struts.action.*;
import org.apache.commons.beanutils.*;
public class LoginAction extends Action {
public ActionForward execute(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws Exception {
String name = (String) PropertyUtils.getSimpleProperty(form, "name");
String password = (String) PropertyUtils.getSimpleProperty(form, "password");
if(!(name.equals("caterpillar") && password.equals("1234"))) {
ActionMessages messages = new ActionMessages();
messages.add(ActionMessages.GLOBAL_MESSAGE,
new ActionMessage("message.namepass.notmatched"));
saveMessages(request, messages);
return mapping.findForward("welcome");
}
else {
request.getSession().setAttribute("valid_user", form);
return mapping.findForward("greeting");
}
}
}
在這次的程式中,我們使用了org.apache.commons.beanutils中的PropertyUtils類別來協助我們取ActionForm中的值,好處是不用理會ActionForm真正的形態,PropertyUtils會自動幫我們判斷,getSimpleProperty()傳回的是Object,我們將之轉換為String。
ActionMessages是Struts 1.1所新增的類別,它變成了ActionErrors的父類別,同樣的,ActionMessage也是Struts 1.1新增的類別,它是ActionError的父類別,資料的格式與完整性檢查在ActionForm中我們已經驗證了,接下來我們在Action中檢查是否符合名稱與密碼,如果不符合就加入相關的訊息。
在Struts 1.1中特意將Message與Error區別,該是認定所謂的Error是使用者的輸入在完整性或格式等上有誤,而Message是指輸入的資料基本上沒有錯誤,但不能符合後續的商務處理。
為了要能夠顯示錯誤與訊息,我們必須在application_zh.properties中加入key-value對應,如下:
代碼:
# -- error --
error.name.required=沒有輸入名稱
error.password.required=沒有輸入密碼
#-- message --
message.namepass.notmatched=名稱與密碼不正確
為了要能使用中文,記得使用native2ascii工具程式進行轉換,接下來我們來看看我們的Welcome.jsp如何撰寫,要注意的是在<html:errors/>與<htm:messages/>的使用:
代碼:
<%@ taglib uri="/tags/struts-bean" prefix="bean" %>
<%@ taglib uri="/tags/struts-html" prefix="html" %>
<%@page contentType="text/html; charset=Big5"%>
<html:html locale="true">
<head>
<title><bean:message key="welcome.title"/></title>
<html:base/>
</head>
<body bgcolor="white">
<html:errors/>
<html:messages id="messages" message="true">
<bean:write name="messages"/>
</html:messages>
<h3>請登入</h3>
<html:form action="/Login">
名稱:<html:text property="name" size="20"/><br>
密碼:<html:password property="password" size="20"/><br>
<html:submit/> <html:reset/>
</html:form>
</body>
</html:html>
如果由於ActionForm傳回ActionErrors物件而返回Welcome.jsp,則<html:errors/>標籤會顯示ActionErrors中的相關錯誤訊息,我們利用<html:messages/>來檢查返回中是否也包括ActionMessages物件,如果有的話就取出並使用<bean:write/>標籤顯示之。
下面是執行時未填寫欄位所顯示的錯誤訊息的一個例子:
代碼:
<html lang="zh">
<head>
<title>哈囉!Struts!</title>
<base href="http://localhost:8080/HelloStruts/pages/Welcome.jsp">
</head>
<body bgcolor="white">
<UL>
<LI>沒有輸入名稱
</LI><LI>沒有輸入密碼
</LI></UL>
<h3>請登入</h3>
<form name="UserForm" method="post" action="/HelloStruts/Login.do">
名稱:<input type="text" name="name" size="20" value=""><br>
密碼:<input type="password" name="password" size="20" value=""><br>
<input type="submit" value="Submit"> <input type="reset" value="Reset">
</form>
</body>
</html>
注意到ActionErrors在Struts 1.2之後可能會被標示為deprecated,將來可能會改以ActionMessages取代,所以<html:errors/>在將來必須以下面的方式來取代:
代碼:
<html:messages id="msg" >
<bean:write name="msg"/>
</html:messages>
在之前的例子中,在<html:messages/>的屬性上設定message為true,這表示顯示ActionMessages的內容:
代碼:
<html:messages id="messages" message="true">
<bean:write name="messages"/>
</html:messages>
发表评论
-
[转]Struts1.2 验证用户是否登陆 两种方法
2007-12-05 21:43 5326Struts1.2 验证用户是否登陆 两种方法 ... -
struts解决乱码问题
2007-09-15 16:38 1683在中文插如mysql数据库的时候出现乱码问题. 解决方法有2 ... -
[摘]struts2原来如此
2007-09-14 18:03 1258许多朋友可能对于Struts 2.0与WebWork关系还搞 ... -
[摘]在Struts 2中实现CRUD
2007-09-14 18:01 1175http://www.blogjava.net/max/arc ... -
简单测试的方法
2007-09-14 17:03 982简单测试的方法: 在类里面加一个主函数进行测试,测试完了之后可 ... -
struts国际化
2007-09-10 15:38 1335PropertiesEditor插件 更新站点: ... -
validatorForm和DynavalidatorForm
2007-09-09 22:23 2900这两个是用于生成脚本的验证.类似javascript效果 相同 ... -
[摘]Struts 学习笔记之ActionForm
2007-09-09 20:34 2189版权所有:(xiaodaoxiaodao)蓝小刀 xi ... -
[摘]actionMessages(),actionError()介绍
2007-09-09 20:08 5463actionMessages(),actionError()介 ... -
[摘]struts入门(1)
2007-09-09 19:10 1350bbbh.org.NET Visual Basic ASP V ... -
ActionErrors和ActionError
2007-09-09 19:04 3221/**ActionErrors和ActionError都是Ac ... -
struts中的验证
2007-09-09 17:24 1028Form里面的validate方法进行格式验证:比如说长度,比 ... -
struts中的listenter监听
2007-09-09 15:12 1703ServletContextListener, Servlet ... -
struts执行流程
2007-09-09 13:48 1472My processPreprocess.......---- ... -
中文乱码问题
2007-09-09 12:45 999在Struts1.2中在RequestProcessor的控制 ... -
[摘]Struts中RequestProcessor
2007-09-09 11:14 2258From Gossip@caterpillar Struts ... -
Struts中actionservlet(1)
2007-09-09 09:56 1604ActionServlet类对应的类名为org.apche.s ... -
[摘]struts入门
2007-09-09 09:13 1038Struts框架 struts框架具有 ... -
Struts掌握这么几个基本
2007-09-08 22:32 1139Struts基本原理,Form, 国际化,控制器的应用,Str ...
相关推荐
Struts2-ActionError-ActionMessage-Example
Struts&ActionError&ActionMessage&Demo 的小例子
Struts简介 什么是Struts Struts基本运作流程 ActionMapping类 Action类 ActionForm类 ActionError与ActionMessage 协同开发 模块化程序 Struts异常处理 Struts国际化支持 PlugIn接口 等等
NULL 博文链接:https://hw1287789687.iteye.com/blog/1874071
3. actionerror 4 4. actionmessage 5 5. append 5 6. bean 7 7.checkbox 7 8.checkboxlist 8 9. combobox 9 10. conponent 9 11. date 11 12. datetimepicker 12 13. debug 12 14. div 12 15. doubleselect 13 16. ...
4. <s:actionerror/>-----如果action的errors有值那么显示出来 5. <s:actionmessage/>-----如果action的message有值那么显示出来 6. <s:append></s:append>-----添加一个值到list,类似于list.add(); 7. ...
actionerror标签:输出Action中getActionErrors()方法返回的异常信息。 actionmessage标签:输出Action中getActionErrors()方法返回的信息。 component标签:生成一个自定义的组件。 div标签:AJAX标签,生成一个...
errors.add("inserterror",new ActionMessage("user.insertError")); saveErrors(request,errors); return(new ActionForward(mapping.findForward("addusererror"))); } request.removeAttribute(mapping....
struts的相关只是回顾和ui标签的使用,以及actionmessage的使用方法以及友好信息提示
1、struts国际化的配置 ... 理解ActionMessage和ActionMessages两个对象的区别 如何传递国际化消息? * 调用saveMessage()传递普通消息 如何显示国际化消息? 通过标签显示消息(可以显示普通消息和错误消息)
3.6.1 actionerror与actionmessage标签详解 166 3.6.2 fielderror标签详解 167 3.6.3 tree与treenode标签详解 168 3.7 struts 2全力支持ajax 174 3.7.1 struts 2中原始ajax技术应用 174 3.7.2 基于dwr的ajax...
-(4)如果ActionForm的validate()方法返回null或返回一个不包含ActionMessage的ActuibErrors对象, 就表示表单验证成功; -(5)ActionServlet根据ActionMapping所包含的映射信息决定将请求转发给哪个Action,如果相应的 ...