附件中有完整的案例!
1.动态方法调用


在业务逻辑处理action中,可以包含一个或者多个逻辑处理方法。
例如:在jsp文件中的同一个form表单中 有多个用来提交的表单值的按钮,可当用户通过不通的按钮提交表单的时候,需要笤俑Action中的不同的处理方法,这是就需要使用动态方法调用。
在使用动态方法调用时候,提交请求的action属性值,有以下几种方法
action=“Action名称!方法名”
或者
action=“Action名称!方法名.action”
或者
采用通配符 {}来进行动态方法调用
或者
method 配置多个同一个action 不同的 method

2.案例:登录/注册(采用  “!” “通配符”“ method属性” 三种方法实现 )
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>
<!--==================== -->
<!--=====定义常量========= -->
<!--==================== -->
<!-- 修改请求的后缀名为.do 修改后每个请求必须要有后缀了-->
<constant name="struts.action.extension" value="do,action"/>
<!-- 对于 采用 "!方法名"这种方法有用 ,采用通配符就不需要设置这个了 -->
<constant name="struts.enable.DynamicMethodInvocation" value="false"/>
<!-- 默认的视图主题 <constant name="struts.ui.theme" value="simple"/>-->
<!--+===================+-->
<!--+=====定义基本包=======+-->
<!--+===================+-->
<package name="default" extends="struts-default">
<action name="showPerson" class="com.luob.action.ShowPerson">
<result name="success">/showPerson.jsp</result>
</action>
</package>
<!-- 使用“!”进行动态方法的调用 -->
<package name="user" extends="struts-default" namespace="/user">
<action name="loginRegister" class="com.luob.action.ShowPerson">
<result name="success">/index.jsp</result>
<result name="reg">/initPerson.jsp</result>
</action>
</package>
<!--使用通配符  来进行动态方法的调用 -->
<package name="user2" extends="struts-default" namespace="/user2">
<action name="userAction_*_*" class="com.luob.action.ShowPerson" method="{1}">
<result name="success">/index.jsp</result>
<result name="reg">/initPerson.jsp</result>
</action>
</package>
<!-- 使用Method来动态指定调用某个Action中的方法 -->
<package name="user3" extends="struts-default" namespace="/user3">
<action name="login" class="com.luob.action.ShowPerson">
<result name="success">/index.jsp</result>
</action>
<action name="register" class="com.luob.action.ShowPerson" method="register">
<result name="reg">/initPerson.jsp</result>
</action>
</package>
</struts>

Action.java


package com.luob.action;
import com.luob.model.Person;
import com.opensymphony.xwork2.ActionSupport;
public class ShowPerson extends ActionSupport {
private Person person;  //采用POJO的方式进行赋值和存值
private String tip;
@Override
public String execute() throws Exception {
// TODO Auto-generated method stub
setTip("您单击了【登录】按钮!您使用帐号"+person.getName()+"登录成功!");
return SUCCESS;
}
public String register(){
setTip("您单击了【注册】按钮!亲填写下面的信息吧!");
return "reg";
}
public Person getPerson() {
return person;
}
public void setPerson(Person person) {
this.person = person;
}
public String getTip() {
return tip;
}
public void setTip(String tip) {
this.tip = tip;
}
}

login.jsp


<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags"  prefix="s"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'login.jsp' starting page</title>
<SCRIPT type="text/javascript">
function reg(){
var targetForm=document.forms[0];
targetForm.action="user/loginRegister!register.action";
targetForm.submit();
}
function reg2(){
var targetForm=document.forms[1];
targetForm.action="user2/userAction_register.action";
targetForm.submit();
}
function reg3(){
var targetForm=document.forms[2];
targetForm.action="user3/register.action";
targetForm.submit();
}
</SCRIPT>
</head>
<body>
<center>
<!-- 使用 “!”来动态调用方法 -->
<s:form action="user/loginRegister!execute.action" method="post" theme="simple">
<ul style="list-style: none;">
<li>帐号:<s:textfield name="person.name"/></li>
<li>密码:<s:textfield name="person.password"/></li>
<li>
<input type="button" value="注册" οnclick="reg()"/>
<s:submit value="登录"/>
</li>
</ul>
</s:form>
<!-- 采用通配符 进行方法动态调用 -->
<s:form action="user2/userAction_.action" method="post" theme="simple">
<ul style="list-style: none;">
<li>帐号:<s:textfield name="person.name"/></li>
<li>密码:<s:textfield name="person.password"/></li>
<li>
<input type="button" value="注册" οnclick="reg2()"/>
<s:submit value="登录"/>
</li>
</ul>
</s:form>
<!-- 采用method属性动态调用方法-->
<s:form action="user3/login.action" method="post" theme="simple">
<ul style="list-style: none;">
<li>帐号:<s:textfield name="person.name"/></li>
<li>密码:<s:textfield name="person.password"/></li>
<li>
<input type="button" value="注册" οnclick="reg3()"/>
<s:submit value="登录"/>
</li>
</ul>
</s:form>
</center>
</body>
</html>

initPerson.jsp


<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'initPerson.jsp' starting page</title>
</head>
<body>
<center>
<s:form action="showPerson" method="post">
<s:textfield name="person.name" label="姓名"/>
<s:textfield name="person.sex"  label="性别"/>
<s:textfield name="person.age" label="年龄"/>
<s:textfield name="person.address" label="住址"/>
<s:submit value="提交"/>
</s:form>
</center>
</body>
</html>
  • Struts2_Dynamic.zip (3.3 MB)
  • 下载次数: 28

Struts2 动态方法调用(十三)相关推荐

  1. Struts2动态方法调用

    2019独角兽企业重金招聘Python工程师标准>>> 动态方法调用 在Struts2中动态方法调用有三种方式,动态方法调用就是为了解决一个Action对应多个请求的处理,以免Act ...

  2. Struts2动态方法调用(DMI)的三种方法

    1.使用Action中的method属性 UserAction.java package org.bigjava.web.action;import com.opensymphony.xwork2.A ...

  3. struts2学习 - action -3 动态方法调用 DMI

    Action执行的时候并不一定要执行execute方法 可以在配置文件中配置Action的时候用method=来指定执行哪个方法 也可以在url地址中动态指定(动态方法调用DMI)(推荐)   配置文 ...

  4. struts2静态方法和动态方法调用

    1 jsp页面 <%@ page language="java" import="java.util.*" pageEncoding="UTF- ...

  5. Struts2使用!动态方法调用无效

    在Struts2的action配置中,可以使用method属性来实现方法的动态调用,除此之外还有一种方式可以实现方法的动态调用,那就是在url中 的action后跟!再跟指定的方法名,比如localh ...

  6. Struts2学习---基本配置,action,动态方法调用,action接收参数

    首先我们先来直接配置,然后再来讲原理:  第一步:jar包的引入:  我们可以到struts2的官网上下载:  http://struts.apache.org/download.cgi#struts ...

  7. struts2的通配符和动态方法调用

    <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC     &quo ...

  8. struts2的动态方法调用(DMI)和通配符映射

    动态方法调用 1.Struts2默认关闭DMI功能,需要使用需要手动打开,配置常量 [html] view plaincopy struts.enable.DynamicMethodInvocatio ...

  9. Struts2笔记——通配符和动态方法调用

     通配符映射 * 一个 Web应用可能有成百上千个 action 声明. 可以利用 struts提供的通配符映射机制把多个彼此相似的映射关系简化为一个映射关系 * 通配符映射规则     > 若 ...

最新文章

  1. android中播放gif动画之二
  2. 关于学习的一则小故事
  3. js 异步和同步的区别
  4. php查看文件属性,文件目录属性及权限
  5. 【BZOJ-1127】KUP 悬线法 + 贪心
  6. OpenCV2:应用篇 三维重建
  7. java中excel文件导入数据库中_〖JAVE经验〗java中Excel导入数据库里
  8. 根据key或value将map容器进行排序
  9. SOA与微服务的比较和对比
  10. Java实现读取文件夹下(包括子目录)所有文件的文件名
  11. 每位程序员必读的书单
  12. Fortran入门教程(十一)—— 模块
  13. 图书管理系统(Java实现,十个数据表,含源码、ER图,超详细报告解释,2020.7.11更新)...
  14. C#读取Excel文件(*.xls)|*.xls(2种方法)
  15. 解决网页微信扫码登录报40163
  16. UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb5 in position 0: invalid start byte解决办法
  17. Mirror for Samsung TV for mac(三星智能电视投屏软件)
  18. Idea使用系列之一:Idea设置类注释模板和方法注释模板
  19. Flutter绘制指南09-动画曲线和方法
  20. 《般若波罗蜜多心经》白话文翻译版本

热门文章

  1. 安装 Genymotion
  2. u32转换bool类型_Rust 数据类型
  3. 英语的重要性之as的用法
  4. mysql中datediff函数用法
  5. 模拟登陆 12306网站
  6. mfc CSocket OnReceive只响应了一次
  7. linux apache绑定的域名解析,泛域名通过Apache绑定解析应该如何操作?
  8. 微视去水印--抓包请求地址
  9. 硬核HashMap源码分析,HashMap文章中的圣经
  10. 使用固定的公网TCP端口地址远程桌面【内网穿透】