Selvet动态配置Action方法的三种方法
来源:互联网 发布:能玩dota2的笔记本知乎 编辑:程序博客网 时间:2024/06/08 05:15
方法1:采用ActionName!methodName的方式来进行;
比如你有一个struts表单:
<s:form action="loginAction"><s:textfield name="username" key="user"/><s:password name="password" key="pass"/><s:submit key="login" /><s:submit key="register" onclick="regist();"/></s:form>里面有两个按钮,一个login,一个register,那么现在你需要考虑的是,register应该怎么选择相应的action呢?
我写了一个resgsit()的js函数,代码如下
function regist(){targetForm=document.forms[0];//这是一种动态调用的方式targetForm.action="loginAction!regist"//推荐使用这种//targetForm.action="registAction ";}这个时候,你会发现,这个地方动态的将这个表单的action改为了loginAction!regist。这是什么原理呢?原来struts支持这种动态调用机制,你首先需要在struts.xml中打开这个机制,只需要一行代码
<!-- 开启使用!动态配置action方法 --><constant name="struts.enable.DynamicMethodInvocation" value="true" />开启之后就可以使用相应的action了。其他的地方都不需要改,只需要在对应的java代码中添加一个regist()方法即可,下面贴上完整的代码:
struts.xml
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN" "http://struts.apache.org/dtds/struts-2.5.dtd"> <struts><!-- 指定默认编码集 --> <constant name="struts.i18n.encoding" value="UTF-8"></constant> <!-- 制定全局国际化资源文件 --> <constant name="struts.custom.i18n.resources" value="mess"/><!-- 开启使用!动态配置action方法 --><constant name="struts.enable.DynamicMethodInvocation" value="true" /> <!-- !形式--><package name="Login_Register_1" extends="struts-default"><!-- 要添加这个,不然会因为不允许使用这个方法而阻止继续进行 --><global-allowed-methods>regist</global-allowed-methods><action name="loginAction" class="cn.nju.fxd.login.LoginAction"><result name="input">/login.jsp</result><result name="error">/error.jsp</result><result name="success">/welcome.jsp</result></action></package></struts>
loginAction对应的LoginAction.java
public class LoginAction extends ActionSupport{private String username;private String password;public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public String regist() throws Exception{return SUCCESS;}public String execute() throws Exception{//struts获得servelt api的方法之一,通过获得ActionContext的实例,来调用一些操作//常见的操作有:/* * Object get(Object key):类似于调用HttpServeltRequest 的 getAttribute(String name)方法; *void put(Object name,Object value):类似于调用 *Map getApplication():返回一个map对象,该对象模拟了该应用的ServletContext实例; *static ActionContext getContext():静态方法,返回一个ActionContext实例,也就是从这里开始可以调用其他方法; *Map getParameters():相当于HttpServletRequest的getParameterMap()方法; *Map getSession():返回一个map对象,该map对象模拟了HttpSession实例; *void setApplication(Map application):直接传入一个map实例,将该map实例里的key-value对直接转换成application的属性名,属性值; *void setSession(Map session):直接传入一个map实例,将该map实例里的key-value对直接转换成session的属性名,属性值; */ActionContext ctx = ActionContext.getContext();Integer counter = (Integer) ctx.getApplication().get("counter");if(counter==null){counter=1;}else{counter++;}ctx.getApplication().put("counter", counter);ctx.getSession().put("username", username);if(getUsername().equals("fanxuande")&&getPassword().equals("123456")){ctx.put("tip", "服务器提示,您已成功登录!");return SUCCESS;}else{return ERROR;}}}
方法二:通过制定method属性来确定使用哪个方法。这个比较简单,不再赘述,只给一个简单的配置例子
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN" "http://struts.apache.org/dtds/struts-2.5.dtd"> <struts><!-- 指定默认编码集 --> <constant name="struts.i18n.encoding" value="UTF-8"></constant> <!-- 制定全局国际化资源文件 --> <constant name="struts.custom.i18n.resources" value="mess"/><package name="Login_Register_1" extends="struts-default"><action name="login" class="cn.nju.fxd.login.LoginAction"><result name="input">/login.jsp</result><result name="error">/error.jsp</result><result name="success">/welcome.jsp</result></action><action name="register" class="cn.nju.fxd.login.LoginAction" method="regist><result name="success">/regSucc.html</result></action></package></struts>
方法三:使用通配符,这个和方法1同样需要在对应的包中添加<global-allowed-method>元素,不然对应的方法无法使用;
具体的方式如下:
<!-- 通配符形式 --><package name="Login_Register" extends="struts-default"><!-- 要添加这个,不然会因为不允许使用这个方法而阻止继续进行 --><global-allowed-methods>regist</global-allowed-methods><action name="*Action" class="cn.nju.fxd.login.LoginAction" method="{1}"><result name="input" >/login.jsp</result><result name="error" type="plainText"><param name="location">/error.jsp</param><param name="charSet">UTF-8</param></result><result name="success">/welcome.jsp</result></action><!-- 不指定class的action,默认使用AcctionSupport,result不指定name,默认为success --><action name="*" ><result>error.jsp</result></action></package>
该方法,struts2会将符合*Action的action匹配,并调用相应的方法。其中method={1}表示第一个*的值。比如客户请求loginAction,那么就会请求*Action的对应的login()方法。
该方法还设置了一个*处理其他所有的不匹配请求,将会跳转到一个error.jsp页面。
0 0
- Selvet动态配置Action方法的三种方法
- Struts2 动态Action的三种实现方法
- Struts2 动态Action的三种实现方法
- Struts2--动态Action的三种实现方法
- structs实现三种action的方法
- Struts2创建Action的三种方法
- Struts2 Action的三种实现方法
- Action的动态调用方法
- Action的动态调用方法
- Action的动态方法调用
- struts学习笔记:三种方法配置action
- struts action的4种配置方法
- struts2 action跳转action 的配置方法
- Struts2的action配置方法
- 动态调用action方法
- 动态调用action方法
- Action动态方法调用
- 动态的调用action里面的方法
- 【Linux】使用gcc生成静态库和动态库
- iTerm的安装以及配置
- Java基础学习总结(15)---BufferedWriter 和 BufferedReader
- 关于DirectShow SDK版本变迁说明及解决找不到streams.h文件
- 一句话木马
- Selvet动态配置Action方法的三种方法
- 制作 OpenStack Linux 镜像
- 值得一试的四款Linux Torrent客户端软件
- 60.拍照和摄像
- Longest Palindromic Substring(最长回文子字符串)
- [Leetcode] #17 Letter Combinations of a Phone Number
- 卷积
- Java 中System里getProperty 方法获得系统参数
- C#之面向对象