public interface Action { public static final String SUCCESS = "success"; public static final String NONE = "none"; public static final String ERROR = "error"; public static final String INPUT = "input"; public static final String LOGIN = "login"; public String execute() throws Exception; }
讓我們來(lái)看看在Hello World示例中的action方法:
package cn.w3cschool.struts2; public class HelloWorldAction{ private String name; public String execute() throws Exception { return "success"; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
為了說(shuō)明action方法控制視圖的要點(diǎn),讓我們對(duì)execute方法進(jìn)行以下更改,并擴(kuò)展ActionSupport類如下:
package cn.w3cschool.struts2; import com.opensymphony.xwork2.ActionSupport; public class HelloWorldAction extends ActionSupport{ private String name; public String execute() throws Exception { if ("SECRET".equals(name)) { return SUCCESS; }else{ return ERROR; } } public String getName() { return name; } public void setName(String name) { this.name = name; } }
在這個(gè)例子中,我們?cè)趀xecute方法中使用一些邏輯來(lái)查看name屬性。如果屬性等于字符串“SECRET”,我們返回SUCCESS作為結(jié)果,否則我們返回ERROR作為結(jié)果。因?yàn)槲覀円呀?jīng)擴(kuò)展了ActionSupport,所以我們可以使用String常量、SUCCESS和ERROR。 現(xiàn)在,讓我們修改struts.xml文件如下:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <constant name="struts.devMode" value="true" /> <package name="helloworld" extends="struts-default"> <action name="hello" class="cn.w3cschool.struts2.HelloWorldAction" method="execute"> <result name="success">/HelloWorld.jsp</result> <result name="error">/AccessDenied.jsp</result> </action> </package> </struts>
讓我們?cè)谀愕膃clipse項(xiàng)目的WebContent文件夾中創(chuàng)建下面的jsp文件HelloWorld.jsp。右鍵單擊項(xiàng)目資源管理器中的WebContent文件夾,然后選擇“New”> “JSP File”。如果返回結(jié)果是SUCCESS將調(diào)用此文件(這個(gè)字符串常量“success”是在Action接口中定義的):
<%@ page contentType="text/html; charset=UTF-8" %> <%@ taglib prefix="s" uri="/struts-tags" %> <html> <head> <title>Hello World</title> </head> <body> Hello World, <s:property value="name"/> </body> </html>
如果action的結(jié)果是ERROR,即字符串常量為“error”,下面的文件將被框架調(diào)用。 以下是AccessDenied.jsp的內(nèi)容:
<%@ page contentType="text/html; charset=UTF-8" %> <%@ taglib prefix="s" uri="/struts-tags" %> <html> <head> <title>Access Denied</title> </head> <body> You are not authorized to view this page. </body> </html>
我們還需要在WebContent文件夾中創(chuàng)建index.jsp文件。此文件將用作初始的action URL,用戶可以單擊它以命令Struts 2框架調(diào)用HelloWorldAction類的execute方法并呈現(xiàn)HelloWorld.jsp視圖。
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <%@ taglib prefix="s" uri="/struts-tags"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>Hello World</title> </head> <body> <h1>Hello World From Struts2</h1> <form action="hello"> <label for="name">Please enter your name</label><br/> <input type="text" name="name"/> <input type="submit" value="Say Hello"/> </form> </body> </html>
這樣,沒(méi)有改變web.xml文件的需求,所以我們可以使用前面在Hello World示例章節(jié)中創(chuàng)建的的web.xml文件?,F(xiàn)在,我們準(zhǔn)備好使用Struts 2框架運(yùn)行我們的Hello World應(yīng)用程序了。
右鍵單擊項(xiàng)目名稱,然后單擊“Export”>“WAR File”創(chuàng)建WAR文件。 然后在Tomcat的webapps目錄中部署這個(gè)WAR文件。最后,啟動(dòng)Tomcat服務(wù)器并嘗試訪問(wèn)URL http://localhost:8080/HelloWorldStruts2/index.jsp。顯示的圖示如下:
讓我們輸入一個(gè)單詞為“SECRET”,你會(huì)看到如下頁(yè)面:
現(xiàn)在輸入除“SECRET”之外的任何詞,你會(huì)看到如下頁(yè)面:
你會(huì)需要頻繁定義多個(gè)action來(lái)處理不同的請(qǐng)求,并為用戶提供不同的URL,因此你將如下定義的不同類:
package cn.w3cschool.struts2; import com.opensymphony.xwork2.ActionSupport; class MyAction extends ActionSupport{ public static String GOOD = SUCCESS; public static String BAD = ERROR; } public class HelloWorld extends ActionSupport{ ... public String execute() { if ("SECRET".equals(name)) return MyAction.GOOD; return MyAction.BAD; } ... } public class SomeOtherClass extends ActionSupport{ ... public String execute() { return MyAction.GOOD; } ... }
你將如下在struts.xml文件中的配置這些action:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> struts> <constant name="struts.devMode" value="true" /> <package name="helloworld" extends="struts-default"> <action name="hello" class="cn.w3cschool.struts2.HelloWorld" method="execute"> <result name="success">/HelloWorld.jsp</result> <result name="error">/AccessDenied.jsp</result> </action> <action name="something" class="cn.w3cschool.struts2.SomeOtherClass" method="execute"> <result name="success">/Something.jsp</result> <result name="error">/AccessDenied.jsp</result> </action> </package> </struts>
正如你在上面的例子中看到的,action的結(jié)果SUCCESS和ERROR是重復(fù)的。為了解決這個(gè)問(wèn)題,建議您創(chuàng)建一個(gè)包含結(jié)果的類。
更多建議: