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, ...
随机推荐
- ADO接口之_RecordsetPtr
转自:http://hi.baidu.com/%CE%D2%B6%CF%C1%CB%CB%BC%C4%EE/blog/item/e057c526c6af6c29c995596e.html _Recor ...
- 23 DesignPatterns学习笔记:C++语言实现 --- 1.1 Factory
23 DesignPatterns学习笔记:C++语言实现 --- 1.1 Factory 2016-07-18 13:03:43 模式理解
- tomcat mac
在mac上安装tomcat,教程很不错:http://blog.csdn.net/j2ee_me/article/details/7928493 注意 1.要下载二进制文件,core, 2.解压后移动 ...
- [zepto]源码学习
$() : zepto选择器,与jquery选择器类似,但是不支持jquery的拓展css支持(:first,:eq,:last...) $("div")选择页面内的全部div元素 ...
- system.data.oracleclient 需要 8.17 需要oracle客户端问题
1.下载 2.程序引用 Oracle.DataAccess.dll 其他引用放在debug下
- leetcode 有效的字母异位词
给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的一个字母异位词. 示例 1: 输入: s = "anagram", t = "nagaram" ...
- 【.net】Dictionary<TKey, TValue>源码分析
一图胜过千言万语~
- 「ZJOI 2010」 排列计数
题目链接 戳我 \(Solution\) 其实我们可以发现这题等价于让你求: 用\(1\)~\(n\)的数组成一个完全二叉树使之满足小根堆性质的方案数 于是我们可以考虑\(dp\) 假设我们现在在\( ...
- RabbitMq初探——用队列实现RPC
rabbitmq构造rpc 前言 rpc——remote procedure call 远程调用.在我接触的使用过http协议.thrift框架来实现远程调用.其实消息队列rabbitmq也可以实现. ...
- OpenStack 业务链networking-sfc介绍 (2) - 底层原理
原文链接:https://blog.csdn.net/bc_vnetwork/article/details/65630475 1. SFC底层实现原理 port chain和ovs driver/ ...