在这章中,你将熟悉一下Struts2重定向Action并学习如何在Struts2程序中使用它.
Post之后的重定向 : 该post模式由Struts2提供.这web程序中是常见的模式.由一个action转发到另一个action.这是常见的用法转发action显示页面.
转发Action结果 : 重定向模式由Struts2提供.ActionMapperFactory提供的ActionMapper用来转发浏览器到URL指定的Action.在下面的Struts2程序中你能看到一个简单的实现.
重定向动态参数 : Action重定向结果带有下面的参数
- actionName
- namespace
- method
- encode
- parse
- location
- prependServletContext
仿照下面的步骤创建一个重定向Action例子 :
第一步 : 创建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> <!-- Rose India Struts 2 Tutorials --> <constant name="struts.enable.DynamicMethodInvocation" value="false" /> <constant name="struts.devMode" value="true" /> <include file="struts-default.xml"/> <package name="roseindia" namespace="/roseindia" extends="struts-default"> <!-- Redirect Action -->
<action name="showAjaxLoginCancelForm"> <result>/pages/ajaxloginCancel.jsp</result> </action>
<action name="ajaxloginCancel" class="net.roseindia.Login"> <result name="input">/pages/ajaxloginCancel.jsp</result> <result name="error">/pages/ajaxloginCancel.jsp</result> <result name="cancel" type="redirect">/pages/ajaxloginCancel.jsp</result> <result>/pages/ajaxloginsuccess.jsp</result> </action> <!-- Add actions here --> </package>
<!-- Add packages here -->
</struts> |
第二步 : 创建一个输入表单 : ajaxloginCancel.jsp
<%@ taglib prefix="s" uri="/struts-tags"%> <html> <head> <s:head theme="ajax" debug="true"/> </head> <body> <s:div id="loginDiv" theme="ajax"> <div style="width: 300px;border-style: solid"> <s:form action="ajaxloginCancel" validate="true"> <tr> <td colspan="2"> Login </td> </tr> <tr> <td colspan="2"> <s:actionerror /> <s:fielderror /> </td> <s:textfield name="username" label="Login name"/> <s:password name="password" label="Password"/> <s:submit value="Submit" theme="ajax" targets="loginDiv" notifyTopics="/ajaxloginCancel"/> <s:submit action="showAjaxLoginCancelForm" value="Cancel" οnclick="form.οnsubmit=null"/> </s:form> </div> </s:div> </body> </html> |
第三步 : 创建一个Action类 :Login.java
package net.roseindia; import com.opensymphony.xwork2.ActionSupport; import java.util.Date;
/** * <p> Validate a user login. </p> */ public class Login extends ActionSupport {
public String execute() throws Exception { if(!getUsername().equals("Admin") || !getPassword().equals("Admin")){ addActionError("Invalid user name or password! Please try again!"); return ERROR; } if(getUsername().equals("Admin") || getPassword().equals("Admin")){ return SUCCESS; }else{ return NONE; } }
// ---- Username property ----
/** * <p>Field to store User username.</p> * <p/> */ private String username = null;
/** * <p>Provide User username.</p> * * @return Returns the User username. */ public String getUsername() { return username; }
/** * <p>Store new User username</p> * * @param value The username to set. */ public void setUsername(String value) { username = value; }
// ---- Username property ----
/** * <p>Field to store User password.</p> * <p/> */ private String password = null;
/** * <p>Provide User password.</p> * * @return Returns the User password. */ public String getPassword() { return password; }
/** * <p>Store new User password</p> * * @param value The password to set. */ public void setPassword(String value) { password = value; }
} |
创建一个适当的校验器 :
validation.xml的格式要么是<Action名>-validation.xml或者<Aaction名>-<Action别名>-validation.xml.
Login-validation.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd"> <validators> <field name="username"> <field-validator type="requiredstring"> <param name="trim">true</param> <message>Login name is required</message> </field-validator> </field> <field name="password"> <field-validator type="requiredstring"> <param name="trim">true</param> <message>Password is required</message> </field-validator> </field> </validators> |
当输入正确的用户名和密码,用户会得到ajaxloginsuccess.jsp页面显示的输入信息
<html> <head> <title>Login Success</title> </head> <body> <p align="center"><font color="#000080" size="5">Login Successful !</font></p> <h1> Welcome to <%=request.getParameter("username")%> </h1> </body> </html> |
输出 :
当程序执行的时候你会看到如下 :
当你什么字段都不填并点击"Submit"的时候,你会得到 :
如果你点击"Cancel"按钮,那么重定向Action并执行得到 :
