📄 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 + -