?? 入門 08 - actionerror與actionmessage - javaworld@tw.htm
字號:
HttpServletResponse response)
<SPAN class=java-keyword>throws</SPAN> Exception {
<SPAN class=java-object>String</SPAN> name = (<SPAN class=java-object>String</SPAN>) PropertyUtils.getSimpleProperty(form, <SPAN class=java-quote>"name"</SPAN>);
<SPAN class=java-object>String</SPAN> password = (<SPAN class=java-object>String</SPAN>) PropertyUtils.getSimpleProperty(form, <SPAN class=java-quote>"password"</SPAN>);
<SPAN class=java-keyword>if</SPAN>(!(name.equals(<SPAN class=java-quote>"caterpillar"</SPAN>) && password.equals(<SPAN class=java-quote>"1234"</SPAN>))) {
ActionMessages messages = <SPAN class=java-keyword>new</SPAN> ActionMessages();
messages.add(ActionMessages.GLOBAL_MESSAGE,
<SPAN class=java-keyword>new</SPAN> ActionMessage(<SPAN class=java-quote>"message.namepass.notmatched"</SPAN>));
saveMessages(request, messages);
<SPAN class=java-keyword>return</SPAN> mapping.findForward(<SPAN class=java-quote>"welcome"</SPAN>);
}
<SPAN class=java-keyword>else</SPAN> {
request.getSession().setAttribute(<SPAN class=java-quote>"valid_user"</SPAN>, form);
<SPAN class=java-keyword>return</SPAN> mapping.findForward(<SPAN class=java-quote>"greeting"</SPAN>);
}
}
}</PRE></DIV></DIV><BR> 在這次的程式中,我們使用了org.apache.commons.beanutils中的PropertyUtils類別來協助我們取
ActionForm中的值,好處是不用理會ActionForm真正的形態,PropertyUtils會自動幫我們判斷,
getSimpleProperty()傳回的是Object,我們將之轉換為String。<BR> ActionMessages是Struts
1.1所新增的類別,它變成了ActionErrors的父類別,同樣的,ActionMessage也是Struts
1.1新增的類別,它是ActionError的父類別,資料的格式與完整性檢查在ActionForm中我們已經驗證了,接下來我們在Action中檢查是否符合名稱與密碼,如果不符合就加入相關的訊息。<BR> 在Struts
1.1中特意將Message與Error區別,該是認定所謂的Error是使用者的輸入在完整性或格式等上有誤,而Message是指輸入的資料基本上沒有錯誤,但不能符合後續的商務處理。<BR> 為了要能夠顯示錯誤與訊息,我們必須在application_zh.properties中加入key-value對應,如下:
<DIV class=code
style="BORDER-TOP-STYLE: solid; BORDER-RIGHT-STYLE: solid; BORDER-LEFT-STYLE: solid; BORDER-BOTTOM-STYLE: solid">
<DIV class=codeHeader
style="BORDER-BOTTOM-STYLE: solid"><B>application_zh.properties</B></DIV>
<DIV class=codeContent><PRE># -- error --
error.name.required=沒有輸入名稱
error.password.required=沒有輸入密碼
#-- message --
message.namepass.notmatched=名稱與密碼不正確</PRE></DIV></DIV><BR> 為了要能使用中文,記得使用native2ascii工具程式進行轉換,接下來我們來看看我們的Welcome.jsp如何撰寫,要注意的是在<html:errors/>與<htm:messages/>的使用:
<DIV class=code
style="BORDER-TOP-STYLE: solid; BORDER-RIGHT-STYLE: solid; BORDER-LEFT-STYLE: solid; BORDER-BOTTOM-STYLE: solid">
<DIV class=codeHeader
style="BORDER-BOTTOM-STYLE: solid"><B>Welcome.jsp</B></DIV>
<DIV class=codeContent><PRE><%@ taglib uri=<SPAN class=java-quote>"/tags/struts-bean"</SPAN> prefix=<SPAN class=java-quote>"bean"</SPAN> %>
<%@ taglib uri=<SPAN class=java-quote>"/tags/struts-html"</SPAN> prefix=<SPAN class=java-quote>"html"</SPAN> %>
<%@page contentType=<SPAN class=java-quote>"text/html; charset=Big5"</SPAN>%>
<html:html locale=<SPAN class=java-quote>"<SPAN class=java-keyword>true</SPAN>"</SPAN>>
<head>
<title><bean:message key=<SPAN class=java-quote>"welcome.title"</SPAN>/></title>
<html:base/>
</head>
<body bgcolor=<SPAN class=java-quote>"white"</SPAN>>
<html:errors/>
<html:messages id=<SPAN class=java-quote>"messages"</SPAN> message=<SPAN class=java-quote>"<SPAN class=java-keyword>true</SPAN>"</SPAN>>
<bean:write name=<SPAN class=java-quote>"messages"</SPAN>/>
</html:messages>
<h3>請登入</h3>
<html:form action=<SPAN class=java-quote>"/Login"</SPAN>>
名稱:<html:text property=<SPAN class=java-quote>"name"</SPAN> size=<SPAN class=java-quote>"20"</SPAN>/><br>
密碼:<html:password property=<SPAN class=java-quote>"password"</SPAN> size=<SPAN class=java-quote>"20"</SPAN>/><br>
<html:submit/> <html:reset/>
</html:form>
</body>
</html:html></PRE></DIV></DIV><BR> 如果由於ActionForm傳回ActionErrors物件而返回Welcome.jsp,則<html:errors/>標籤會顯示ActionErrors中的相關錯誤訊息,我們利用<html:messages/>來檢查返回中是否也包括
ActionMessages物件,如果有的話就取出並使用<bean:write/>標籤顯示之。<BR> 下面是執行時未填寫欄位所顯示的錯誤訊息的一個例子:
<DIV class=code
style="BORDER-TOP-STYLE: solid; BORDER-RIGHT-STYLE: solid; BORDER-LEFT-STYLE: solid; BORDER-BOTTOM-STYLE: solid">
<DIV class=codeContent><PRE><html lang=<SPAN class=java-quote>"zh"</SPAN>>
<head>
<title>哈囉!Struts!</title>
<base href=<SPAN class=java-quote>"http:<SPAN class=java-comment>//localhost:8080/HelloStruts/pages/Welcome.jsp"</SPAN>></SPAN>
</head>
<body bgcolor=<SPAN class=java-quote>"white"</SPAN>>
<UL>
<LI>沒有輸入名稱
</LI><LI>沒有輸入密碼
</LI></UL>
<h3>請登入</h3>
<form name=<SPAN class=java-quote>"UserForm"</SPAN> method=<SPAN class=java-quote>"post"</SPAN> action=<SPAN class=java-quote>"/HelloStruts/Login.<SPAN class=java-keyword>do</SPAN>"</SPAN>>
名稱:<input type=<SPAN class=java-quote>"text"</SPAN> name=<SPAN class=java-quote>"name"</SPAN> size=<SPAN class=java-quote>"20"</SPAN> value=<SPAN class=java-quote>""><br>
密碼:<input type="</SPAN>password<SPAN class=java-quote>" name="</SPAN>password<SPAN class=java-quote>" size="</SPAN>20<SPAN class=java-quote>" value="</SPAN><SPAN class=java-quote>"><br>
<input type="</SPAN>submit<SPAN class=java-quote>" value="</SPAN>Submit<SPAN class=java-quote>"> <input type="</SPAN>reset<SPAN class=java-quote>" value="</SPAN>Reset">
</form>
</body>
</html></PRE></DIV></DIV><BR> 注意到ActionErrors在Struts
1.2之後可能會被標示為deprecated,將來可能會改以ActionMessages取代,所以<html:errors/>在將來必須以下面的方式來取代:
<DIV class=code
style="BORDER-TOP-STYLE: solid; BORDER-RIGHT-STYLE: solid; BORDER-LEFT-STYLE: solid; BORDER-BOTTOM-STYLE: solid">
<DIV class=codeContent><PRE><html:messages id=<SPAN class=java-quote>"msg"</SPAN> >
<bean:write name=<SPAN class=java-quote>"msg"</SPAN>/>
</html:messages></PRE></DIV></DIV><BR> 在之前的例子中,在<html:messages/>的屬性上設定message為true,這表示顯示ActionMessages的內容:代碼:
<DIV class=code
style="BORDER-TOP-STYLE: solid; BORDER-RIGHT-STYLE: solid; BORDER-LEFT-STYLE: solid; BORDER-BOTTOM-STYLE: solid">
<DIV class=codeContent><PRE><html:messages id=<SPAN class=java-quote>"messages"</SPAN> message=<SPAN class=java-quote>"<SPAN class=java-keyword>true</SPAN>"</SPAN>>
<bean:write name=<SPAN class=java-quote>"messages"</SPAN>/>
</html:messages></PRE></DIV></DIV><!-- page content ends --><!--<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/"><rdf:Description rdf:about="http://www.javaworld.com.tw/confluence/pages/viewpage.action?pageId=481" dc:identifier="http://www.javaworld.com.tw/confluence/pages/viewpage.action?pageId=481" dc:title="入門 08 - ActionError與ActionMessage" trackback:ping="http://www.javaworld.com.tw/confluence/rpc/trackback/481"/></rdf:RDF>-->
<P>
<DIV class=greybox><IMG height=16
src="入門 08 - ActionError與ActionMessage - JAVAWORLD@TW.files/comment_16.gif"
width=16 align=absMiddle border=0> 0 comments | <A
href="http://www.javaworld.com.tw/confluence/pages/viewpage.action?pageId=481&showComments=true#addcomment"><IMG
height=16
src="入門 08 - ActionError與ActionMessage - JAVAWORLD@TW.files/add_comment_16.gif"
width=16 align=absMiddle border=0></A> <A
href="http://www.javaworld.com.tw/confluence/pages/viewpage.action?pageId=481&showComments=true#addcomment">Add
Comment</A> </DIV></TD>
<TD width=5> </TD>
<TD vAlign=top width="25%">
<DIV class=navmenu>
<DIV class=menuheading>Page Operations</DIV>
<DIV class=menuitems>
<DIV class=operations>
<UL>
<LI><A accessKey=i
href="http://www.javaworld.com.tw/confluence/pages/pageinfo.action?pageId=481"><IMG
title="Page Information" height=16
src="入門 08 - ActionError與ActionMessage - JAVAWORLD@TW.files/about_16.gif"
width=16 align=absMiddle border=0></A><SPAN class=label> <A
href="http://www.javaworld.com.tw/confluence/pages/pageinfo.action?pageId=481">Page
Information</A></SPAN>
<LI><A
href="http://www.javaworld.com.tw/confluence/pages/viewpreviousversions.action?pageId=481"><IMG
title="Page History" height=16
src="入門 08 - ActionError與ActionMessage - JAVAWORLD@TW.files/history_16.gif"
width=16 align=absMiddle border=0></A><SPAN class=label> <A
href="http://www.javaworld.com.tw/confluence/pages/viewpreviousversions.action?pageId=481">Page
History</A></SPAN> </LI></UL>
<UL>
<LI><A
href="http://www.javaworld.com.tw/confluence/display/opensrc/Home"><IMG
title="Space Homepage" height=16
src="入門 08 - ActionError與ActionMessage - JAVAWORLD@TW.files/home_16.gif"
width=16 align=absMiddle border=0></A><SPAN class=label> <A
href="http://www.javaworld.com.tw/confluence/display/opensrc/Home">Space
Homepage</A></SPAN>
<LI><A
href="http://www.javaworld.com.tw/confluence/spaces/viewspacesummary.action?key=opensrc"><IMG
title="Space Summary" height=16
src="入門 08 - ActionError與ActionMessage - JAVAWORLD@TW.files/web_16.gif"
width=16 align=absMiddle border=0></A><SPAN class=label> <A
href="http://www.javaworld.com.tw/confluence/spaces/viewspacesummary.action?key=opensrc">Space
Summary</A></SPAN> </LI></UL></DIV>
<P>
<DIV class=infopanel-heading>Incoming Links: <SPAN
class=smallfont>(<A
href="http://www.javaworld.com.tw/confluence/pages/pageinfo.action?pageId=481#incoming">more</A>)</SPAN>
</DIV><IMG title=Struts入門 height=16
src="入門 08 - ActionError與ActionMessage - JAVAWORLD@TW.files/docs_16.gif"
width=16 align=absMiddle border=0> <A
href="http://www.javaworld.com.tw/confluence/pages/viewpage.action?pageId=1958">Struts入門</A>
<BR>
<P></P>
<P>
<DIV class=infopanel-heading>Hot Referrers: <SPAN
class=smallfont>(<A
href="http://www.javaworld.com.tw/confluence/pages/pageinfo.action?pageId=481#referers">more</A>)</SPAN>
</DIV><SPAN class=smallerfont><A
title=http://140.138.150.106/confluence/pages/viewpage.action?pageId=481
href="http://140.138.150.106/confluence/pages/viewpage.action?pageId=481">140.138.150.106/confluence/pa...</A>
(29) <BR><A
title=http://140.138.150.106/confluence/pages/viewpage.action?pageId=1958
href="http://140.138.150.106/confluence/pages/viewpage.action?pageId=1958">140.138.150.106/confluence/pa...</A>
(17) <BR><A
title=http://www.jsptw.com/confluence/pages/viewpage.action?pageId=1958
href="http://www.jsptw.com/confluence/pages/viewpage.action?pageId=1958">http://www.jsptw.com/confluence/pages/viewpage.action?pageId=1958</A>
(8) <BR><A
title=http://140.138.150.106/confluence/pages/viewpage.action?pageId=481&showComments=true
href="http://140.138.150.106/confluence/pages/viewpage.action?pageId=481&showComments=true">140.138.150.106/confluence/pa...</A>
(7) <BR><A
title=http://140.138.150.106/confluence/pages/viewpage.action?pageId=481&showComments=false
href="http://140.138.150.106/confluence/pages/viewpage.action?pageId=481&showComments=false">140.138.150.106/confluence/pa...</A>
(7) <BR><A
title=http://javaworld.com.tw/confluence/pages/viewpage.action?pageId=1958
href="http://javaworld.com.tw/confluence/pages/viewpage.action?pageId=1958">javaworld.com.tw/confluence/p...</A>
(4) <BR><A title=http://www.baidu.com/baidu?wd=actionerror&cl=3
href="http://www.baidu.com/baidu?wd=actionerror&cl=3">http://www.baidu.com/baidu?wd=actionerror&cl=3</A>
(4) <BR><A
title=http://www.baidu.com/baidu?wd=ActionMessage&cl=3
href="http://www.baidu.com/baidu?wd=ActionMessage&cl=3">http://www.baidu.com/baidu?wd=ActionMessage&cl=3</A>
(3) <BR><A title=http://www.baidu.com/s?wd=actionmessage&cl=3
href="http://www.baidu.com/s?wd=actionmessage&cl=3">http://www.baidu.com/s?wd=actionmessage&cl=3</A>
(3) <BR><A
title=http://www.baidu.com/s?wd=add%28String%2C+ActionMessage%29&cl=3
href="http://www.baidu.com/s?wd=add%28String%2C+ActionMessage%29&cl=3">http://www.baidu.com/s?wd=add%28String%2C+ActionMessage%29&cl=3</A>
(3) <BR></SPAN>
<P></P></DIV></DIV>
<DIV></DIV></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE></DIV>
<DIV class=license-nonprofit>This site is running on Atlassian <B><A
href="http://www.atlassian.com/c/conf/10137">Confluence</A></B> with a free
<B>Open Source Project / Non-profit License</B> (<A
href="http://www.atlassian.com/c/conf/10138">license details</A>).<BR><A
href="http://www.atlassian.com/c/conf/10137">Confluence</A> is professional
wiki, blog and knowledge management tool. <A
href="http://www.atlassian.com/c/conf/10137">Evaluate Confluence for your
organisation</A>.<BR></DIV>
<DIV class=bottomshadow></DIV>
<DIV class=smalltext id=poweredby>Powered by <A class=smalltext
href="http://www.atlassian.com/software/confluence/default.jsp?clicked=footer">Atlassian
Confluence</A> (Version: 1.3.5 Build:#122 Mar 01, 2005) - <A class=smalltext
href="http://jira.atlassian.com/secure/BrowseProject.jspa?id=10470">Bug/feature
request</A> - <A
href="http://www.javaworld.com.tw/confluence/administrators.action">Contact
Administrators</A> <BR></DIV></BODY></HTML>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -