?? struts 2_0的action講解 - max on java - blogjava.htm
字號:
style="COLOR: #0000ff"><</SPAN><SPAN style="COLOR: #800000">action
</SPAN><SPAN style="COLOR: #ff0000">name</SPAN><SPAN
style="COLOR: #0000ff">="AliasHelloWorld"</SPAN><SPAN style="COLOR: #ff0000">
class</SPAN><SPAN style="COLOR: #0000ff">="tutorial.HelloWorld"</SPAN><SPAN
style="COLOR: #ff0000"> method</SPAN><SPAN
style="COLOR: #0000ff">="aliasAction"</SPAN><SPAN
style="COLOR: #0000ff">></SPAN><SPAN style="COLOR: #000000"><BR>
</SPAN><SPAN style="COLOR: #0000ff"><</SPAN><SPAN
style="COLOR: #800000">result</SPAN><SPAN
style="COLOR: #0000ff">></SPAN><SPAN
style="COLOR: #000000">/HelloWorld.jsp</SPAN><SPAN
style="COLOR: #0000ff"></</SPAN><SPAN
style="COLOR: #800000">result</SPAN><SPAN
style="COLOR: #0000ff">></SPAN><SPAN style="COLOR: #000000"><BR></SPAN><SPAN
style="COLOR: #0000ff"></</SPAN><SPAN
style="COLOR: #800000">action</SPAN><SPAN
style="COLOR: #0000ff">></SPAN></DIV><SPAN
style="FONT-SIZE: smaller; FONT-STYLE: italic">例2
classes/struts.xml中AlaisHelloWorld Action的配置</SPAN><BR><BR>實現方法二,使用<A
href="http://localhost:8080/Struts2_Action/HelloWorld!aliasAction.action">http://localhost:8080/Struts2_Action/HelloWorld!aliasAction.action</A>地址來訪問HelloWorld
Action。
<P>在瀏覽器地址欄中鍵入<A
href="http://localhost:8080/Struts2_Action/AliasHelloWorld.action">http://localhost:8080/Struts2_Action/AliasHelloWorld.action</A>或
<A
href="http://localhost:8080/Struts2_Action/HelloWorld!aliasAction.action">http://localhost:8080/Struts2_Action/HelloWorld!aliasAction.action</A>,可以看到如圖2所示頁面。</P><IMG
alt="圖2 自定義Action調用方法頁面"
src="Struts 2_0的Action講解 - Max On Java - BlogJava.files/r_img_2.gif"><BR><SPAN
style="FONT-SIZE: smaller; FONT-STYLE: italic">圖2 自定義Action調用方法頁面</SPAN>
<P>通過上面的兩個例子,細心的朋友應該可能會發現classes/tutorial/HelloWorld.java中Action方法(execute和aliasAction)返回都是SUCCESS。這個屬性變量我并沒有定義,所以大家應該會猜到它在ActionSupport或其父類中定義。沒錯,SUCCESS在接口com.opensymphony.xwork2.Action中定義,另外同時定義的還有<A
href="http://www.blogjava.net/max/archive/com/opensymphony/xwork/Action.html#ERROR"><SPAN
style="FONT-FAMILY: Courier New">ERROR</SPAN></A><SPAN
style="FONT-FAMILY: Courier New">, </SPAN><A
href="http://www.blogjava.net/max/archive/com/opensymphony/xwork/Action.html#INPUT"><SPAN
style="FONT-FAMILY: Courier New">INPUT</SPAN></A><SPAN
style="FONT-FAMILY: Courier New">, </SPAN><A
href="http://www.blogjava.net/max/archive/com/opensymphony/xwork/Action.html#LOGIN"><SPAN
style="FONT-FAMILY: Courier New">LOGIN</SPAN></A><SPAN
style="FONT-FAMILY: Courier New">, </SPAN><A
href="http://www.blogjava.net/max/archive/com/opensymphony/xwork/Action.html#NONE"><SPAN
style="FONT-FAMILY: Courier New">NONE</SPAN></A>。</P>
<P>此外,我在配置Action時都沒有為result定義名字(name),所以它們默認都為success。值得一提的是Struts
2.0中的result不僅僅是Struts
1.x中forward的別名,它可以實現除forward外的很激動人心的功能,如將Action輸出到FreeMaker模板、Velocity模板、JasperReports和使用XSL轉換等。這些都過result里的type(類型)屬性(Attribute)定義的。另外,您還可以自定義result類型。</P>下面讓我們來做一個Velocity模板輸出的例子,首先在classes/struts.xml中新建一個Action映射(Mapping),將其result類型設為velocity,如以下代碼所示:<BR>
<DIV
style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><SPAN
style="COLOR: #0000ff"><</SPAN><SPAN style="COLOR: #800000">action
</SPAN><SPAN style="COLOR: #ff0000">name</SPAN><SPAN
style="COLOR: #0000ff">="VMHelloWorld"</SPAN><SPAN style="COLOR: #ff0000">
class</SPAN><SPAN style="COLOR: #0000ff">="tutorial.HelloWorld"</SPAN><SPAN
style="COLOR: #0000ff">></SPAN><SPAN style="COLOR: #000000"><BR>
</SPAN><SPAN style="COLOR: #0000ff"><</SPAN><SPAN
style="COLOR: #800000">result </SPAN><SPAN
style="COLOR: #ff0000">type</SPAN><SPAN
style="COLOR: #0000ff">="velocity"</SPAN><SPAN
style="COLOR: #0000ff">></SPAN><SPAN
style="COLOR: #000000">/HelloWorld.vm</SPAN><SPAN
style="COLOR: #0000ff"></</SPAN><SPAN
style="COLOR: #800000">result</SPAN><SPAN
style="COLOR: #0000ff">></SPAN><SPAN style="COLOR: #000000"><BR></SPAN><SPAN
style="COLOR: #0000ff"></</SPAN><SPAN
style="COLOR: #800000">action</SPAN><SPAN
style="COLOR: #0000ff">></SPAN></DIV><SPAN
style="FONT-SIZE: smaller; FONT-STYLE: italic">例3
classes/struts.xml中VMHelloWorld
Action的配置</SPAN><BR><BR>新建HelloWorld.vm,內容如下所示:<BR>
<DIV
style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><SPAN
style="COLOR: #0000ff"><</SPAN><SPAN style="COLOR: #800000">html</SPAN><SPAN
style="COLOR: #0000ff">></SPAN><SPAN style="COLOR: #000000"><BR>
</SPAN><SPAN style="COLOR: #0000ff"><</SPAN><SPAN
style="COLOR: #800000">head</SPAN><SPAN style="COLOR: #0000ff">></SPAN><SPAN
style="COLOR: #000000"><BR> </SPAN><SPAN
style="COLOR: #0000ff"><</SPAN><SPAN style="COLOR: #800000">title</SPAN><SPAN
style="COLOR: #0000ff">></SPAN><SPAN
style="COLOR: #000000">Velocity</SPAN><SPAN
style="COLOR: #0000ff"></</SPAN><SPAN
style="COLOR: #800000">title</SPAN><SPAN style="COLOR: #0000ff">></SPAN><SPAN
style="COLOR: #000000"><BR> </SPAN><SPAN
style="COLOR: #0000ff"><</SPAN><SPAN style="COLOR: #800000">meta </SPAN><SPAN
style="COLOR: #ff0000">http-equiv</SPAN><SPAN
style="COLOR: #0000ff">="content-type"</SPAN><SPAN style="COLOR: #ff0000">
content</SPAN><SPAN style="COLOR: #0000ff">="text/html;
charset=UTF-8"</SPAN><SPAN style="COLOR: #0000ff">></SPAN><SPAN
style="COLOR: #000000"><BR> </SPAN><SPAN
style="COLOR: #0000ff"></</SPAN><SPAN style="COLOR: #800000">head</SPAN><SPAN
style="COLOR: #0000ff">></SPAN><SPAN style="COLOR: #000000"><BR>
</SPAN><SPAN style="COLOR: #0000ff"><</SPAN><SPAN
style="COLOR: #800000">body</SPAN><SPAN style="COLOR: #0000ff">></SPAN><SPAN
style="COLOR: #000000"><BR> </SPAN><SPAN
style="COLOR: #0000ff"><</SPAN><SPAN style="COLOR: #800000">h2</SPAN><SPAN
style="COLOR: #0000ff">></SPAN><SPAN style="COLOR: #000000">Message rendered
in Velocity: $message</SPAN><SPAN style="COLOR: #0000ff"></</SPAN><SPAN
style="COLOR: #800000">h2</SPAN><SPAN style="COLOR: #0000ff">></SPAN><SPAN
style="COLOR: #000000"><BR> </SPAN><SPAN
style="COLOR: #0000ff"></</SPAN><SPAN style="COLOR: #800000">body</SPAN><SPAN
style="COLOR: #0000ff">></SPAN><SPAN style="COLOR: #000000"><BR></SPAN><SPAN
style="COLOR: #0000ff"></</SPAN><SPAN style="COLOR: #800000">html</SPAN><SPAN
style="COLOR: #0000ff">></SPAN></DIV><SPAN
style="FONT-SIZE: smaller; FONT-STYLE: italic">例3 HelloWorld.vm</SPAN><BR>
<P>在瀏覽器地址欄中鍵入<A
href="http://localhost:8080/Struts2_Action/VMHelloWorld.action">http://localhost:8080/Struts2_Action/VMHelloWorld.action</A>,頁面輸出如下圖3所示。</P><IMG
alt="圖3 HelloWorld.vm的輸出頁面"
src="Struts 2_0的Action講解 - Max On Java - BlogJava.files/r_img_3.gif"><BR><SPAN
style="FONT-SIZE: smaller; FONT-STYLE: italic">圖3 HelloWorld.vm的輸出頁面</SPAN>
<CENTER>
<TABLE
style="BORDER-RIGHT: #f0c000 1px solid; BORDER-TOP: #f0c000 1px solid; BORDER-LEFT: #f0c000 1px solid; BORDER-BOTTOM: #f0c000 1px solid; BACKGROUND-COLOR: #ffffce; TEXT-ALIGN: left"
cellSpacing=0 cellPadding=0 border=0>
<TBODY>
<TR>
<TD
style="PADDING-RIGHT: 4px; PADDING-LEFT: 4px; PADDING-BOTTOM: 4px; PADDING-TOP: 4px"><IMG
src="Struts 2_0的Action講解 - Max On Java - BlogJava.files/lightbulb_on.gif"></TD>
<TD
style="PADDING-RIGHT: 4px; PADDING-LEFT: 4px; PADDING-BOTTOM: 4px; PADDING-TOP: 4px; FONT-FAMILY: 華文仿宋">要運行例3需要在WEB-INF/lib中添加以下幾個包:
<UL>
<LI><A
href="http://jakarta.apache.org/site/downloads/downloads_commons-collections.cgi">commons-collections-3.2.jar</A>
<LI><A
href="http://jakarta.apache.org/site/downloads/downloads_velocity.cgi">velocity-1.4.jar</A>
<LI><A
href="http://jakarta.apache.org/site/downloads/downloads_velocity.cgi">velocity-tools-view-1.2.jar</A>
<LI><A
href="http://excalibur.apache.org/download.cgi">avalon-logkit-2.1.jar</A></LI></UL></TD></TR></TBODY></TABLE></CENTER>
<P>前面,我花了不少的時間討論Action的輸出。我老板有句名言——程序無非就是輸入、操作和輸出。因此,現在我們要討論一下輸入——表單輸入。</P>
<P>使用Struts
2.0,表單數據的輸入將變得非常方便,和普通的POJO一樣在Action編寫Getter和Setter,然后在JSP的UI標志的name與其對應,在提交表單到Action時,我們就可以取得其值。</P>
<P>讓我們看一個例子,新建Login
Action,它通過Login.jsp的表單獲得用戶名和密碼,驗查用戶名是否為“max”,密碼是否則為“secret”。如果,兩者都符合,就在HelloWorld中顯示“Welcome,
max”,否則顯示“Invalid user or Password”。</P>
<DIV
style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><IMG
src="Struts 2_0的Action講解 - Max On Java - BlogJava.files/None.gif"
align=top><SPAN style="COLOR: #0000ff">package</SPAN><SPAN
style="COLOR: #000000"> tutorial;<BR><IMG
src="Struts 2_0的Action講解 - Max On Java - BlogJava.files/None.gif"
align=top><BR><IMG
src="Struts 2_0的Action講解 - Max On Java - BlogJava.files/None.gif"
align=top></SPAN><SPAN style="COLOR: #0000ff">import</SPAN><SPAN
style="COLOR: #000000"> com.opensymphony.xwork2.ActionSupport;<BR><IMG
src="Struts 2_0的Action講解 - Max On Java - BlogJava.files/None.gif"
align=top><BR><IMG id=Codehighlighter1_107_680_Open_Image
onclick="this.style.display='none'; Codehighlighter1_107_680_Open_Text.style.display='none'; Codehighlighter1_107_680_Closed_Image.style.display='inline'; Codehighlighter1_107_680_Closed_Text.style.display='inline';"
src="Struts 2_0的Action講解 - Max On Java - BlogJava.files/ExpandedBlockStart.gif"
align=top><IMG id=Codehighlighter1_107_680_Closed_Image style="DISPLAY: none"
onclick="this.style.display='none'; Codehighlighter1_107_680_Closed_Text.style.display='none'; Codehighlighter1_107_680_Open_Image.style.display='inline'; Codehighlighter1_107_680_Open_Text.style.display='inline';"
src="Struts 2_0的Action講解 - Max On Java - BlogJava.files/ContractedBlock.gif"
align=top></SPAN><SPAN style="COLOR: #0000ff">public</SPAN><SPAN
style="COLOR: #000000"></SPAN><SPAN style="COLOR: #0000ff">class</SPAN><SPAN
style="COLOR: #000000"> Login </SPAN><SPAN
style="COLOR: #0000ff">extends</SPAN><SPAN style="COLOR: #000000"> ActionSupport
</SPAN><SPAN id=Codehighlighter1_107_680_Closed_Text
style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG
src="Struts 2_0的Action講解 - Max On Java - BlogJava.files/dot.gif"></SPAN><SPAN
id=Codehighlighter1_107_680_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG
src="Struts 2_0的Action講解 - Max On Java - BlogJava.files/InBlock.gif" align=top>
</SPAN><SPAN style="COLOR: #0000ff">private</SPAN><SPAN
style="COLOR: #000000"> String name;<BR><IMG
src="Struts 2_0的Action講解 - Max On Java - BlogJava.files/InBlock.gif" align=top>
</SPAN><SPAN style="COLOR: #0000ff">private</SPAN><SPAN
style="COLOR: #000000"> String password;<BR><IMG
src="Struts 2_0的Action講解 - Max On Java - BlogJava.files/InBlock.gif" align=top>
</SPAN><SPAN style="COLOR: #0000ff">private</SPAN><SPAN
style="COLOR: #000000"> String message;<BR><IMG
src="Struts 2_0的Action講解 - Max On Java - BlogJava.files/InBlock.gif" align=top>
<BR><IMG id=Codehighlighter1_209_227_Open_Image
onclick="this.style.display='none'; Codehighlighter1_209_227_Open_Text.style.display='none'; Codehighlighter1_209_227_Closed_Image.style.display='inline'; Codehighlighter1_209_227_Closed_Text.style.display='inline';"
src="Struts 2_0的Action講解 - Max On Java - BlogJava.files/ExpandedSubBlockStart.gif"
align=top><IMG id=Codehighlighter1_209_227_Closed_Image style="DISPLAY: none"
onclick="this.style.display='none'; Codehighlighter1_209_227_Closed_Text.style.display='none'; Codehighlighter1_209_227_Open_Image.style.display='inline'; Codehighlighter1_209_227_Open_Text.style.display='inline';"
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -