Struts2方法调用的三种方式(有新的!调用方法的说明)
在Struts2中方法调用概括起来主要有三种形式
第一种方式:指定method属性
<action name="heroAction" class="com.ABC123.HeroAction" method="add">
<result name="add">/add.jsp</result>
</action>
这样Struts2就会调用heroAction中的add方法。
第二种方式:动态方法调用(DMI)
用这种方法需要设置一个常量
struts2的2.3以上版本的jar包 必须配置DMI
<constant name="struts.enable.DynamicMethodInvocation" value="true" />
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts> <constant name="struts.enable.DynamicMethodInvocation" value="true" /> <package name="goToEat" namespace="/" extends="struts-default"> <action name="heroAction" class="com.ABC123.action.HeroAction" >
<result name="list" >/list.jsp</result>
<result name="gotoupd" >/upd.jsp</result> <!-- 重定向-->
<result name="add" type="redirect">heroAction!list.action</result> </action> </package> </struts>
动态方法调用是指表单元素的action并不是直接等于某个Action的名字,而是以如下形式来指定Form的action属性
<!-- action属性为action!methodName的形式 -->
action = "action!methodName.action"
在struts.xml中定义如下Action
<package name="goToEat" namespace="/" extends="struts-default"> <action name="heroAction" class="com.ABC123.action.HeroAction" >
<result name="list" >/list.jsp</result>
<result name="gotoupd" >/upd.jsp</result> <!-- 重定向-->
<result name="add" type="redirect">heroAction!list.action</result> </action> </package>
HeroAction中的方法为
package com.ABC123.action; import java.util.ArrayList;
import java.util.List; import com.ABC123.pojo.Hero; public class HeroAction { private static List<Hero> heroList=new ArrayList<Hero>(); private Hero hero; private int id; static{
heroList.add(new Hero(1, "德玛", 12, "德玛西亚", "很难哦哦"));
heroList.add(new Hero(2, "艾希", 45, "德玛西亚", "很厉害的啊"));
heroList.add(new Hero(3, "亚索", 78, "小学生", "很牛逼"));
} public String list() { return "list"; } //增加
public String add() { System.out.println(hero); heroList.add(hero);
return "add"; } //删除
public String del() { System.out.println("删除的下标===>"+id); Hero hero2 = heroList.get(id); System.out.println(hero2); heroList.remove(hero2);
return "add";
} public String goToUpd() { Hero hero5 = heroList.get(id);
System.out.println("该条点击修改的的hero==>"+hero5); return "gotoupd"; } //修改
public String upd() {
System.out.println(hero.getId());
int id2 = hero.getId();
id2-=1;
System.out.println("id2===>"+id2); //修改前
Hero hero5 = heroList.get(id2);
System.out.println("该条点击修改的的hero==>"+hero5); //接到的值为hero hero5.setAge(hero.getAge()); hero5.setName(hero.getName()); hero5.setStory(hero.getStory()); hero5.setZhenying(hero.getZhenying()); // heroList.set(id2, hero); System.out.println("修改后的hero==>"+hero);
return "add";
} //================================ public List<Hero> getHeroList() {
return heroList;
} public void setHeroList(List<Hero> heroList) {
this.heroList = heroList;
} public Hero getHero() {
return hero;
} public void setHero(Hero hero) {
this.hero = hero;
} public int getId() {
return id;
} public void setId(int id) {
this.id = id;
} }
则在JSP中用如下方式调用方法
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="/struts-tags" prefix="s" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<a href="/struts-01/add.jsp">去添加</a>
</br>
</br>
<table border="1">
<tr>
<td>id</td>
<td>name</td>
<td>age</td>
<td>zhenying</td>
<td>story</td>
<td colspan="2">操作</td>
</tr> <c:forEach items="${heroList }" var="hero">
<tr>
<td>${hero.id }</td>
<td>${hero.name }</td>
<td>${hero.age }</td>
<td>${hero.zhenying }</td>
<td>${hero.story }</td>
<td><a href="heroAction!goToUpd.action?id=${hero.id -1}">修改</a></td>
<td><a href="heroAction!del.action?id=${hero.id -1 }">删除</a></td>
</tr>
</c:forEach>
</table> <hr> <a href="/struts-01/add.jsp">去添加</a>
</br>
</br>
<table border="1">
<tr>
<td>id</td>
<td>name</td>
<td>age</td>
<td>zhenying</td>
<td>story</td>
<td colspan="2">操作</td>
</tr> <s:iterator value="heroList"> <tr>
<td><s:property value="id"/></td>
<td><s:property value="name "/></td>
<td><s:property value="age "/></td>
<td><s:property value="zhenying "/></td>
<td><s:property value="story "/></td>
<td><a href="heroAction!goToUpd.action?id=<s:property value='id-1'/>">修改</a></td>
<td><a href="heroAction!del.action?id=<s:property value='id-1'/>">删除</a></td>
</tr>
</s:iterator> </table> </body>
</html>
第三种方式:通配符(推荐使用)
<action name="heroAction_*" class="com.ABC123.action.HeroAction" method="{1}">
<result name="list" >/list.jsp</result>
</action>
这里的{1} 相当于传进来字符串进行拼接地址 比如传进来list 拼接为/list.jsp
<action name="heroAction_*" class="com.ABC123.action.HeroAction" method="{1}">
<result name="{1}" >/{1}.jsp</result>
</action>
<a href="heroAction_list.action">查询
<a href="heroAction_add.action">增加
heroAction_list.action就会调用heroAction中的list方法 然后跳转到list.jsp
heroAction_add.action就会调用heroAction中的add方法 然后跳转到add.jsp
Struts2方法调用的三种方式(有新的!调用方法的说明)的更多相关文章
- Struts2方法调用的三种方式
在Struts2中方法调用概括起来主要有三种形式 第一种方式:指定method属性 <action name="student" class="com.itmyho ...
- Struts2获取Session的三种方式
1.Map<String,Object> session = ActionContext.getContext().getSession(); session.put("cod ...
- 【Struts2】Struts2获取session的三种方式
1.Map<String,Object> map = ActionContext.getContext().getSession(); 2.HttpSession session = S ...
- [OpenSource]浅谈.Net和Java互相调用的三种方式
在很多的大型系统开发中,开发工具往往不限制于同一种开发语言,而是会使用多种开发语言的混合型开发.目前Java和.Net都声称自己占85%的市场份额,不管谁对谁错,Java和.Net是目前应用开发的两个 ...
- 浅谈.Net和Java互相调用的三种方式
在很多的大型系统开发中,开发工具往往不限制于同一种开发语言,而是会使用多种开发语言的混合型开发.目前Java和.Net都声称自己占85%的市场份 额,不管谁对谁错,Java和.Net是目前应用开发的两 ...
- SpringBoot2.0.2 Application调用的三种方式
一.注解 @SpringBootApplication 点开查看源码是由多个注解合成的注解,其中主要的注解有: @SpringBootConfigurati ...
- 手写面试编程题- 数组去重 深拷贝 获取文本节点 设置奇数偶数背景色 JS中检测变量为string类型的方法 第6题闭包 将两个数组合并为一个数组 怎样添加、移除、移动、复制、创建和查找节点? 继承 对一个数组实现随机排序 让元素水平 垂直居中的三种方式 通过jQuery的extend方法实现深拷贝
第1题==>实现数组去重 通过 new Set(数组名) // var arr = [12, 12, 3, 4, 5, 4, 5, 6, 6]; // var newarr1 = new Set ...
- 判断python对象是否可调用的三种方式及其区别
查找资料,基本上判断python对象是否为可调用的函数,有三种方法 使用内置的callable函数 callable(func) 用于检查对象是否可调用,返回True也可能调用失败,但是返回False ...
- Struts2访问ServletAPI的三种方式
web应用中需要访问的ServletAPI,通常只有HttpServletRequest,HttpSession,ServletContext三个,这三个接口分别代表jsp内置对象中的request, ...
随机推荐
- eclipse 在线安装 properties 插件
help - install new software - work with site http://propedit.sourceforge.jp/eclipse/updates/ 要耐心等待
- linux每天一小步---rm命令详解
1 命令功能 rm命令用于删除文件或者目录,值得注意的是linux下的删除不弯曲等同于windows系统下的删除操作,linux系统下一旦删除了文件或者目录那么它将消失,而windows系统下我们还可 ...
- WebDriver高级应用——操作Web页面的滚动条
目的: (1)滑动页面的滚动条到页面最下方 (2)滑动页面的滚动条到页面某个元素 (3)滑动页面的滚动条向下移动某个数量的像素 测试的网址: http://www.seleniumhq.org/ 代码 ...
- 对/proc/cpuinfo文件下的各个参数的说明及实践
我们通常要检查系统的cpu的相关信息,之前在进行查看cpu的信息的时候,我最长用的方式 是,直接将/etc/cpuinfo下的所有的内容进行显示,然后通过对全部文件的查看,来提取我们需要的信息,虽然查 ...
- C#基础入门 八
C#基础入门 八 泛型 C#中的泛型能够将类型作为参数来传递,即在创建类型时用一个特定的符号,如"T"来作为一个占位符,代替实际的类型,等待实例化时用一个实际的类型来代替. pub ...
- [PHP]socket的连接超时 与 读取/写入超时
socket处理时有两种超时 , 分为连接超时 和 读取/写入数据超时 1. stream_socket_client 函数中的超时时间是连接超时 , 默认是php.ini中的default_sock ...
- [Erlang30]Erlang shell是如何工作的?
一些关于Erlang启动进程的分析:希望你会喜欢. 原英文地址:http://ferd.ca/repl-a-bit-more-and-less-than-that.html 研究Erlang shel ...
- jsp页面都放在web-inf下面说是要防止用户直接访问jsp页面,为么不能直接访问jsp
为了保护那部分jsp页面,如果没有登录验证,那部分jsp用户可以直接访问,这样很不安全,放在WEB-INF下面,就使得只能WEB-INF文件夹外jsp页面调用里面的jsp,这样来使用,就比如我们有一个 ...
- Modular Arithmetic ( Arithmetic and Algebra) CGAL 4.13 -User Manual
1 Introduction Modular arithmetic is a fundamental tool in modern algebra systems. In conjunction wi ...
- Codeforces Gym 100513F F. Ilya Muromets 水题
F. Ilya Muromets Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100513/probl ...