📄 入門 07 - 使用actionform類別 - javaworld@tw.htm
字号:
<SPAN class=java-keyword>public</SPAN> class LoginAction <SPAN class=java-keyword>extends</SPAN> Action {
<SPAN class=java-keyword>public</SPAN> ActionForward execute(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
<SPAN class=java-keyword>throws</SPAN> Exception {
<SPAN class=java-object>String</SPAN> name = ((UserForm) form).getName();
<SPAN class=java-object>String</SPAN> password = ((UserForm) form).getPassword();
<SPAN class=java-keyword>if</SPAN>(name.equals(<SPAN class=java-quote>"caterpillar"</SPAN>) && password.equals(<SPAN class=java-quote>"1234"</SPAN>)) {
request.setAttribute(<SPAN class=java-quote>"valid_user"</SPAN>, form);
<SPAN class=java-keyword>return</SPAN> mapping.findForward(<SPAN class=java-quote>"greeting"</SPAN>);
}
<SPAN class=java-keyword>return</SPAN> mapping.findForward(<SPAN class=java-quote>"welcome"</SPAN>);
}
}</PRE></DIV></DIV><BR> ActionForm被作為參數傳遞至execute()方法,我們必須轉換為其原來的形態UserForm,這樣才可以取出當中的屬性值,在驗證使用者的名稱與密碼無誤後,我們查找greeting的ActionForward對象並傳回,這會使得ActionServlet將請求
forward至greeting.jsp:
<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>greeting.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> %>
<%@ taglib uri=<SPAN class=java-quote>"/tags/struts-logic"</SPAN> prefix=<SPAN class=java-quote>"logic"</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>>
<logic:present scope=<SPAN class=java-quote>"request"</SPAN> name=<SPAN class=java-quote>"valid_user"</SPAN>>
<bean:write name=<SPAN class=java-quote>"valid_user"</SPAN> property=<SPAN class=java-quote>"name"</SPAN>/>您好,這是您的神秘禮物!
</logic:present>
<logic:notPresent scope=<SPAN class=java-quote>"request"</SPAN> name=<SPAN class=java-quote>"valid_user"</SPAN>>
<html:link forward=<SPAN class=java-quote>"welcome"</SPAN>>請先登入</html:link>
</logic:notPresent>
</body>
</html:html></PRE></DIV></DIV><BR> <login:present>標籤會查看指定的範圍中是不是有指定名稱的JavaBean物件,如果有的話就使用<
bean:write>寫出指定的屬性,而<login:notPresent>的作用恰恰相反,如果沒有指定名稱的JavaBean
物件,就給出一個超連結要求先進行登入,<html:link>的forward屬性會查找struts-config.xml中的<
global-forward>的welcome設定。<BR>如果驗證失敗,則查找welcome的ActionForward對象並傳回,也就是Welcome.jsp,我們用之為登入表單:
<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:form action=<SPAN class=java-quote>"/LoginAction"</SPAN> focus=<SPAN class=java-quote>"name"</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> <html:form>指定的LoginAction必須在struts-config.xml中有定義,<html:
text>與<html:password>會取出對應的ActionForm物件中對應的屬性值,如果使用者填寫的內容不正確而被送回Welcome.jsp,使用者將可以看到先前所填寫的值,如果不想顯示先前所填寫的值,則將<html:text>與<html:
password>的redisplay屬性設定為false即可,這幾個Struts標籤必須與Action物件及ActionForm物件搭配使用。<BR> 接下來您可以測試一下程式,連上http://localhost:8080/HelloStruts/,如果您填寫了正確的表單欄位並送出,則結果會如下:
<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/greeting.jsp"</SPAN>></SPAN>
</head>
<body bgcolor=<SPAN class=java-quote>"white"</SPAN>>
caterpillar您好,這是您的神秘禮物!
</body>
</html></PRE></DIV></DIV><BR> ActionForm在Struts中是屬於視圖組件的一部份,它是表單的物件化表單,表單的參數會自動設定給ActionForm,無法對應的就加以忽略,您可以定義validate()方法來驗證表單設定的內容,這在下一個主題中將加以說明,在ActionForm中您可以填入表單值,作一些適當的值轉換,進行基本的資料驗證,ActionForm是表單資料發送至應用程式前的緩衝區,在某些程度上,它是應用程式的防火牆,您可以在
ActionForm中避免不正確或不安全的資料進入應用程式。<BR> 綜合一下,ActionForm擔任以下的幾個職責:<BR>*表單欄位的耕耘者<BR>*資料的緩衝區<BR>*資料的驗證<BR>*進行屬性值的轉換<BR>*應用程式防火牆
<!-- 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=479" dc:identifier="http://www.javaworld.com.tw/confluence/pages/viewpage.action?pageId=479" dc:title="入門 07 - 使用ActionForm類別" trackback:ping="http://www.javaworld.com.tw/confluence/rpc/trackback/479"/></rdf:RDF>-->
<P>
<DIV class=greybox><IMG height=16
src="入門 07 - 使用ActionForm類別 - 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=479&showComments=true#addcomment"><IMG
height=16
src="入門 07 - 使用ActionForm類別 - 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=479&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=479"><IMG
title="Page Information" height=16
src="入門 07 - 使用ActionForm類別 - 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=479">Page
Information</A></SPAN>
<LI><A
href="http://www.javaworld.com.tw/confluence/pages/viewpreviousversions.action?pageId=479"><IMG
title="Page History" height=16
src="入門 07 - 使用ActionForm類別 - 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=479">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="入門 07 - 使用ActionForm類別 - 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="入門 07 - 使用ActionForm類別 - 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=479#incoming">more</A>)</SPAN>
</DIV><IMG title=Struts入門 height=16
src="入門 07 - 使用ActionForm類別 - 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=479#referers">more</A>)</SPAN>
</DIV><SPAN class=smallerfont><A
title=http://140.138.150.106/confluence/pages/viewpage.action?pageId=479
href="http://140.138.150.106/confluence/pages/viewpage.action?pageId=479">140.138.150.106/confluence/pa...</A>
(28) <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>
(23) <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>
(9) <BR><A
title=http://140.138.150.106/confluence/pages/viewpage.action?pageId=479&showComments=true
href="http://140.138.150.106/confluence/pages/viewpage.action?pageId=479&showComments=true">140.138.150.106/confluence/pa...</A>
(8) <BR><A
title=http://140.138.150.106/confluence/pages/viewpage.action?pageId=479&showComments=false
href="http://140.138.150.106/confluence/pages/viewpage.action?pageId=479&showComments=false">140.138.150.106/confluence/pa...</A>
(7) <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>
(6) <BR><A
title=http://www.google.com/search?hl=zh-CN&ie=UTF-8&q=actionform&lr=lang_zh-CN
href="http://www.google.com/search?hl=zh-CN&ie=UTF-8&q=actionform&lr=lang_zh-CN">Google:
actionform</A> (2) <BR><A
title=http://www.baidu.com/s?lm=0&si=&rn=10&ie=gb2312&ct=0&wd=actionform+validate&pn=10&cl=3
href="http://www.baidu.com/s?lm=0&si=&rn=10&ie=gb2312&ct=0&wd=actionform+validate&pn=10&cl=3">http://www.baidu.com/s?lm=0&si=&rn=10&ie=gb2312&ct=0&wd=actionform+validate&pn=10&cl=3</A>
(2) <BR><A
title=http://www.google.com.tw/search?hl=zh-TW&q=ActionForm&btnG=Google+%E6%90%9C%E5%B0%8B&meta=cr%3DcountryTW
href="http://www.google.com.tw/search?hl=zh-TW&q=ActionForm&btnG=Google+%E6%90%9C%E5%B0%8B&meta=cr%3DcountryTW">Google:
ActionForm</A> (2) <BR><A
title=http://www.google.com.tw/search?hl=zh-TW&q=actionform+beans&btnG=%E6%90%9C%E5%B0%8B&meta=lr%3Dlang_zh-TW
href="http://www.google.com.tw/search?hl=zh-TW&q=actionform+beans&btnG=%E6%90%9C%E5%B0%8B&meta=lr%3Dlang_zh-TW">Google:
actionform beans</A> (2) <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 + -