struts2之动态方法调用
来源:互联网 发布:轩辕剑光武进阶数据 编辑:程序博客网 时间:2024/05/29 10:22
当我们访问一个Action时,默认是访问execute()方法,但当在一个Action中存存多个方法时,这时我们应该怎么定位到想要访问的方法呢?这时就需要用到动态方法调用DMI(Dynamic Method Invocation)。这里简单介绍两种动态调用的方法:
一、method属性
二、通配符
一、method属性
在struts.xml文件中,我们可以指定method属性,来定位我们要访问的方法,如下代码:
- <action name="dmi-register" class="dmi.LoginRegisterAction" method="register"></action>
下面通过一个登录注册的demo来演示一下具体的操作过程:
一)、LoginRegisterAction 源文件部分代码如下:
- private String userName;
- private String password;
- //默认执行登录功能
- public String execute() {
- if ("admin".equals(userName) && "123".equals(password)) {
- ActionContext context = ActionContext.getContext();
- context.getSession().put("tip", "恭喜你" + userName + "你已经登成功");
- return SUCCESS;
- } else {
- return ERROR;
- }
- }
- public String register() {
- ActionContext context = ActionContext.getContext();
- context.getSession().put("tip", "恭喜你" + userName + "你已经注册成功");
- return SUCCESS;
- }
二)、struts.xml 文件部分配置如下:
- <!-- 动态方法调用 method属性-->
- <action name="dmi-login" class="dmi.LoginRegisterAction">
- <result name="input">/dmi/login.jsp</result>
- <result name="error">/dmi/error.jsp</result>
- <result name="success">/dmi/welcome.jsp</result>
- </action>
- <action name="dmi-register" class="dmi.LoginRegisterAction" method="register" >
- <result name="input">/dmi/login.jsp</result>
- <result name="error">/dmi/error.jsp</result>
- <result name="success">/dmi/welcome.jsp</result>
- </action>
以上struts.xml文件配置中,dmi-login默认对应Action中的execute()方法,dmi-register由于加了method="register"属性,则对应Action中的register()方法。
三)、loginRegister.jsp文件代码如下:
- <html>
- <head>
- <title>struts2之动态方法调用</title>
- <script type="text/javascript" src="../jquery-1.4.3.js"></script>
- <script type="text/javascript">
- $(function(){
- $("#register2").click(function(){
- var node=$("#myForm2");
- node.attr("action","dmi-register.action");
- });
- })
- </script>
- </head>
- <body>
- <h4>动态方法调用之method属性</h4>
- <form id="myForm2" action="dmi-login.action">
- 用户名:<input type="text" name="userName" />
- 密 码:<input type="password" name="password" />
- <input type="submit" value="登录" />
- <input type="submit" id="register2" value="注册" />
- </form>
- </body>
- </html>
在一个form表单中,有登录、注册两个动作,分别对应Action中的不同方法,登录 默认对应execute()方法,注册对应register()方法,这样,通过method属性实现动态方法调用的操作就完了,但是struts.xml文件中的配置存存冗余问题,这时我们可以通过通配符来解决这个问题。
二、通配符
一)、为了更好的说明问题,我们在LoginRegisterAction 源文件中增加以下两个方法,方法实现功能与上面的完成一样,主要用于体现 登录 不在调用默认的 execute() 方法,而是对应于Action中的 dmiLogin() 方法,注册 对应Action中的 dmiRegister() 方法:
- public String dmiRegister() {
- ActionContext context = ActionContext.getContext();
- context.getSession().put("tip", "恭喜你" + userName + "你已经注册成功");
- return SUCCESS;
- }
- public String dmiLogin(){
- if ("admin".equals(userName) && "123".equals(password)) {
- ActionContext context = ActionContext.getContext();
- context.getSession().put("tip", "恭喜你" + userName + "你已经登成功");
- return SUCCESS;
- } else {
- return ERROR;
- }
- }
二)、struts.xml 文件部分配置如下:
- <!-- 动态方法调用 通配符-->
- <action name="*Action" class="dmi.LoginRegisterAction" method="{1}" >
- <result name="input">/dmi/login.jsp</result>
- <result name="error">/dmi/error.jsp</result>
- <result name="success">/dmi/welcome.jsp</result>
- </action>
上面的<action name="*Action" >不是一个普通的Action,而是一个定义了一系列的逻辑Action,只要用户请求的URL是*Action模式的,都可能用该Action来处理;method属性值不再是Action中的哪一个方法,而是一个表达式,该表达式的值是name属性中的第一个*的值。例如用户请求的URL是:dmiLoginAction.action,则调用LoginRegisterAction中的dmiLogin方法。
三)、loginRegister.jsp文件增加如下代码:
- $("#register").click(function(){
- var node=$("#myForm");
- node.attr("action","dmiRegisterAction.action");
- });
- <h4>动态方法调用之通配符</h4>
- <form id="myForm" action="dmiLoginAction.action">
- 用户名:<input type="text" name="userName" />
- 密 码:<input type="password" name="password" />
- <input type="submit" value="登录" />
- <input type="submit" id="register" value="注册" />
- </form>
- struts2之动态方法调用
- struts2之动态方法调用
- struts2之动态方法调用
- 复习Struts2之Action动态方法调用
- struts2之2--动态方法调用
- struts2之动态方法调用(DMI)
- 学习之----Struts2动态方法调用
- struts2动态方法调用之参数占位符动态调用
- struts2动态方法调用
- Struts2 动态方法调用
- struts2动态方法调用
- struts2 动态方法调用
- Struts2动态方法调用
- struts2--动态方法调用
- Struts2动态方法调用
- Struts2动态方法调用
- Struts2动态方法调用
- struts2 动态方法调用
- POJ 1061 青蛙的烦恼
- 类(2):多态(例子)
- 小心浏览器的Cookie文件
- 同步线程2(Monitor)
- 关于jsp连接sql server2005 写入数据库中文乱码的问题
- struts2之动态方法调用
- hdu1052 田忌赛马 贪心正确性证明
- ajax(十四课)
- 遇到的参数化查询问题
- html的meta标签解释
- 深入java.lang.Throwable
- 为何iPad 2充电快 但用不了多久?
- Windows 8再现游戏漏洞 试玩版可直接变正式版
- Shell比较两个日期的大小