SSH框架——struts2篇
Posted 夕冰
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SSH框架——struts2篇相关的知识,希望对你有一定的参考价值。
使用Action的动态方法调用
在一个Action中包含多个控制处理逻辑。例如对于同一个表单,当用户通过不同按钮来提交同一个表单时,系统需要使用Action的不同方法来处理用户请求,这时就需要用的Action的动态方法调用。
1、通过ActionName!MethodName方法
通过Action名!方法名 方法调用,struts.xml配置如下
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd">
<struts> <!-- 指定编码 --> <constant name="struts.i18n.encoding" value="UTF-8"></constant> <!-- 指定全局国际化资源文件 --> <constant name="struts.custom.i18n.resources" value="mess"></constant> <!-- 修改以下配置,不需要重新启动tomcat --> <constant name="struts.devMode" value="true"></constant> <!-- 调用动态方法 --> <constant name="struts.enable.DynamicMethodInvocation" value="true"></constant>
<package name="test" extends="struts-default"> <action name="toLogin" class="org.cgx.vo.LoginRegiistAction "> <result name="login">/welcome.jsp</result> <result name="regist">/regist.jsp</result> <result name="error">/error.jsp</result> </action>
</package>
</struts> |
其中<constant name="struts.enable.DynamicMethodInvocation"value="true"></constant> 一定要设置为true,否则struts机制不支持动态方法。
Action类方法代码
package org.cgx.vo;
import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionSupport;
publicclass LoginRegiistAction extends ActionSupport{ private String username; private String password; private String tip;
public String getUsername() { returnusername; } publicvoid setUsername(String username) { this.username = username; } public String getPassword() { returnpassword; } publicvoid setPassword(String password) { this.password = password; } public String getTip() { returntip; } publicvoid setTip(String tip) { this.tip = tip; }
@Override public String execute() throws Exception { if(this.getUsername().equals("xice")&&this.getPassword().equals("123")){ //登录成功将用户名存入session ActionContext.getContext().getSession().put("user", "欢迎"+this.getUsername()+",您已登录成功!"); //返回登录成功标记 return"login"; } return"error"; }
//点击注册时响应action public String regist() throws Exception{ ActionContext.getContext().getSession().put("user", "恭喜"+this.getUsername()+",您已注册成功!"); return"regist"; } } |
登录注册表单
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <%@taglib prefix="s" uri="/struts-tags" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>登录注册界面</title> </head>
<body> <s:form action="toLogin"> <s:textfield name="username" key="user"/><br/> <s:textfield name="password" key="pass"/><br/> <s:submit key="login"/> <input type="submit" value="注册" onclick="regist();"/> </s:form> </body>
<script> function regist(){ //注册按钮响应函数 //获取第一个表单 registForm = document.forms[0]; //动态修改表单的action属性 registForm.action = "toLogin!regist"; }
</script> </html>
|
点击登录时直接调用Action的execute()方法,点击注册时通过javaScript设置Action
registForm.action = "toLogin!regist"; |
首先调用名为toLogin的Action,在此Action中调用regist()方法,完成注册功能。
2、指定method属性的方法
在struts.xml文件中配置<action…/>元素时可以指定method属性,则可以让Action调用指定的方法。
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd">
<struts> <!-- 指定编码 --> <constant name="struts.i18n.encoding" value="UTF-8"></constant> <!-- 指定全局国际化资源文件 --> <constant name="struts.custom.i18n.resources" value="mess"></constant> <!-- 修改以下配置,不需要重新启动tomcat --> <constant name="struts.devMode" value="true"></constant> <!-- 调用动态方法 --> <constant name="struts.enable.DynamicMethodInvocation" value="true"></constant>
<package name="test" extends="struts-default"> <action name="toLogin" class="org.cgx.vo.LoginRegiistAction "> <result name="login">/welcome.jsp</result> <result name="error">/error.jsp</result> </action>
<action name="toRegist" class="org.cgx.vo.LoginRegiistAction" method="regist"> <result name="regist">/regist.jsp</result> </action> </package>
</struts> |
Action类方法代码和5.1相同,登录注册表单只需修改javascript中的方法
<script> function regist(){ //注册按钮响应函数 //获取第一个表单 registForm = document.forms[0]; //动态修改表单的action属性 registForm.action = " toRegist "; } </script> |
3、通配符*的方法
在struts.xml文件中配置<action…/>元素时使用通配符*
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd">
<struts> <!-- 指定编码 --> <constant name="struts.i18n.encoding" value="UTF-8"></constant> <!-- 指定全局国际化资源文件 --> <constant name="struts.custom.i18n.resources" value="mess"></constant> <!-- 修改以下配置,不需要重新启动tomcat --> <constant name="struts.devMode" value="true"></constant> <!-- 调用动态方法 --> <constant name="struts.enable.DynamicMethodInvocation" value="true"></constant>
<package name="test" extends="struts-default"> <action name="to*" class="org.cgx.vo.LoginRegiistAction" method="{1}"> <result name="login">/welcome.jsp</result> <result name="regist">/regist.jsp</result> <result name="error">/error.jsp</result> </action> </package> </struts> |
method="{1}"指定Action调用方法名 和第一个通配符*所代表的字符相同的方法。因此需要在Action类中增加名为login()的方法
public String login() throws Exception{ if(this.getUsername().equals("xice")&&this.getPassword().equals("123")){ //登录成功将用户名存入session ActionContext.getContext().getSession().put("user", this.getUsername()); setTip("欢迎"+this.getUsername()+",您已登录成功!"); //返回登录成功标记 return"login"; } return"error"; } |
登录注册表单代码如下:
<s:form action="tologin"> <s:textfield name="username" key="user"/><br/> <s:textfield name="password" key="pass"/><br/> <s:submit key="login"/> <input type="submit" value="注册" onclick="regist();"/> </s:form>
<script> function regist(){ //注册按钮响应函数 //获取第一个表单 registForm = document.forms[0]; //动态修改表单的action属性 registForm.action = "toregist"; } </script> |
此时直接调用相应的Action,tologin、toregist。配置文件中的通配符to*将会自动匹配,并调用login()、regist()方法。
此时的*通配login、regist。
以上是关于SSH框架——struts2篇的主要内容,如果未能解决你的问题,请参考以下文章