struts 页面调用Action的指定方法并传递参数
如果为action配置了类,那么默认就会执行Action类的excute方法,Action类的写法三种:
①
public class Action1 {
public String execute(){
return "abc";//根据返回结果,去xml文件中找name与之匹配的result
}
}
②
import com.opensymphony.xwork2.Action;//ActionSupport类实现了该接口
public class Action2 implements Action {
@Override
public String execute() throws Exception {
// TODO Auto-generated method stub
return "success";
}
}
③
import com.opensymphony.xwork2.ActionSupport;
public class Action3 extends ActionSupport {
@Override
public String execute(){
// TODO Auto-generated method stub
return "success";
}
}
推荐使用第三种。
调用Action类的指定方法可以在xml中配置(以下文件三处蓝字代表三种方法):
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>
<constant name="struts.devMode" value="true" />
<constant name="struts.i18n.encoding" value="GBK" /> <!-- internationalization -->
<package name="front" namespace="/" extends="struts-default">
<action name="hello"><!-- 当不配置class的时候,会调用默认的ActionSupport类 (xwork框架中的类)-->
<result>
/Hello.jsp
</result>
</action>
<action name="act1" class="test.Action1">
<result name="success">/ActionS.jsp</result>
<result name="failure">/ActionF.jsp</result>
<result name="abc">/Hello.jsp</result>
</action>
<action name="act2" class="test.Action2">
<result name="success">/ActionS.jsp</result>
<result name="failure">/ActionF.jsp</result>
<result name="abc">/Hello.jsp</result>
</action>
</package>
<package name="user" extends="struts-default" namespace="/user">
<action name="userAdd" class="test.UserAction"method="add">
<!--
调用方法由execute改为add方法,在jsp页面中链接后边加上!add也可以达到同样效果。推荐后者。
后者又称DMI Dynamic Method Invoke 动态方法调用
在jsp中写法例子:
<% String context = request.getContextPath(); %>
<a href="<%=context %>/user/user!add">添加用户</a>
-->
<result>/userAddSuccess.jsp</result>
</action>
</package>
<!-- 通配符示例,使用通配符要遵守“约定优于配置”的原则 –>
<!-- 关于*号的匹配:如果地址栏中的action名在配置文件中找不到同名的action名,
则对有*号的可以匹配的action名,优先匹在配置文件中书写位置靠上的action -->
<package name="actions" extends="struts-default" namespace="/actions">
<action name="Student*" class="test.struts2.action.StudentAction" method="{1}">
<result>/Student{1}_success.jsp</result>
</action>
<!-- {1}就代表name中的第一个*,以此类推 -->
<action name="*_*" class="test.struts2.action.{1}Action" method="{2}">
<result>/{1}_{2}_success.jsp</result>
<!-- {0}_success.jsp -->
</action>
</package>
</struts>
使用Action类中指定的方法如果需要参数有以下三种方式:
①
直接在jsp的链接中写:“/user!add?name=a&age=8”就可以把参数传递到下面的Action中
import com.opensymphony.xwork2.ActionSupport;
public class UserAction extends ActionSupport {
private String name;
private int age;
public String add() {
System.out.println("name=" + name);
System.out.println("age=" + age);
return SUCCESS;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
②
使用Domain Model接收参数<a href="user/user!add?user.name=a&user.age=8">添加用户</a>
这种方式对应的Action:
import com.bjsxt.struts2.user.model.User;
import com.opensymphony.xwork2.ActionSupport;
public class UserAction extends ActionSupport {
private User user;
//private UserDTO userDTO;
public String add() {
System.out.println("name=" + user.getName());
System.out.println("age=" + user.getAge());
return SUCCESS;
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
}
public class User {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
③
使用ModelDriven接收参数<a href="user/user!add?name=a&age=8">添加用户</a>
也可以用下面的Action
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
public class UserAction extends ActionSupport implements ModelDriven<User>{//此处要指定清楚
private User user = new User(); //需要自己new
public String add() {
System.out.println("name=" + user.getName());
System.out.println("age=" + user.getAge());
return SUCCESS;
}
@Override
public User getModel() {
return user;
}
}
public class User {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
struts 页面调用Action的指定方法并传递参数的更多相关文章
- 工作随笔——Java调用Groovy类的方法、传递参数和获取返回值
接触Groovy也快一年了,一直在尝试怎么将Groovy引用到日常工作中来.最近在做一个功能的时候,花了点时间重新看了下Java怎么调用Groovy的方法.传递参数和获取返回值. 示例Groovy代码 ...
- [Xcode 实际操作]八、网络与多线程-(18)PerformSelector消息处理方法:由运行时系统,负责去调用对象的指定方法
目录:[Swift]Xcode实际操作 本文将演示PerformSelector消息处理方法. 在项目文件夹上点击鼠标右键弹出文件菜单. [New File]->[Swift File]-> ...
- WeChat-SmallProgram:引用页面调用组件内的方法
如何创建组件 及 使用 这里不在多说:请参考之前文章 如何定义一个组件 自定义select下拉选项框组件使用 引用组件: <sub-unit-select id="init" ...
- Groovy小结:java调用Groovy方法并传递参数
Groovy小结:java调用Groovy方法并传递参数 @(JAVA总结) 1. 场景描述 在网上查了资料发现,java有三种方式调用groovy脚本.但是真正在实际的服务器环境中,嵌入groovy ...
- 利用Ajax调用controller方法并传递参数
一.背景由于近期工作需要将人脸识别功能与选课系统结合,但是对前端知识了解的很少,只能边做边学了,因此在这边把遇到的一些坑说明一下,希望能帮助到像我一样的初学者 二.具体内容这里采用框架为MVC,如果想 ...
- .net中用Action等委托向外传递参数
原文:.net中用Action等委托向外传递参数 一般我们可以使用ref,out达到向外传递参数目的. Action<T>是一个特殊的委托,除了常规应用.我们还可以用它来实现简单 ...
- odoo14 button 事件调用python方法如何传递参数
1 <field name="user_ids" 2 mode="kanban" 3 nolabel="1" 4 options=&q ...
- SSH框架下ajax调用action并生成JSON再传递到客户端【以get和post方式提交】
需要完成的任务: 主要是把JSP页面上图片ID传给服务器端,服务器读取cookie看是否有username,如果有则根据ID读取MongoDB数据库,读出图片URL,再存放到mysql中的collec ...
- python调用jenkinsAPI构建jenkins,并传递参数
安装jenkins 安装jenkins很简单,可以用多种方式安装,这里知道的有: 在官网下载rpm包,手动安装,最费事 centos系统通过yum安装,ubuntu通过apt-get安装(不推荐,因为 ...
随机推荐
- android用户界面的教程实例---转自qianqianlianmeng的博客
1.android用户界面之AlarmManager教程实例汇总http://www.apkbus.com/android-48405-1-1.html2.android用户界面之文本编辑教程实例汇总 ...
- 计算机基础-day2
为何要有操作系统? 首先要说明一下操作系统是什么? 操作系统是协调.管理.控制计算机硬件和为应用程序提供接口的控制软件,操作系统向下连接硬件,向上承载应用程序. 由于硬件不论种类还是工作流程都是繁杂的 ...
- BZOJ 1115 [POI2009]石子游戏Kam(阶梯博弈)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1115 [题目大意] 有N堆石子,除了第一堆外,每堆石子个数都不少于前一堆的石子个数. ...
- 【平衡树】【pb_ds】 bzoj1861 [Zjoi2006]Book 书架
需要用数组记录编号为i的书的位置,和位置i处的书的编号. Code: #include<cstdio> #include<ext/pb_ds/assoc_container.hpp& ...
- vue的开发环境搭建命令加图解
vue的开发环境的搭建 不管什么软件我们都要去官网下载安装,这是作为专业程序员的安全意识. 1.安装node.js 官方下载的页面:点击这里 大约展示的页面是这样子的!我们演示是windows 64位 ...
- JDK源码学习笔记——HashSet LinkedHashSet TreeSet
你一定听说过HashSet就是通过HashMap实现的 相信我,翻一翻HashSet的源码,秒懂!! 其实很多东西,只是没有静下心来看,只要去看,说不定一下子就明白了…… HashSet 两个属性: ...
- css排版之-标准文档流
标准流指的是在不使用其他的与排列和定位相关的特殊CSS规则时,各种元素的排列规则.HTML文档中的元素可以分为两大类:行内元素和块级元素. 1.行内元素不占据单独的空间,依附于块级元素,行 ...
- [转]servlet配置中init-param
需要初始化的参数比如你的servlet里面有个属性为int total=0默认是0,你想让他初始时50则用init-param 给他赋值 init-param面对应的参数名和值,是给servlet在初 ...
- node.js+mysql增删查改
数据库和表: -- -- 数据库: `test` -- -- -------------------------------------------------------- -- -- 表的结构 ` ...
- 云计算与OpenStack(虚拟机Nova篇)
<云计算与OpenStack(虚拟机Nova篇)> 基本信息 作者: 伯龙 程志鹏 张杰 出版社:电子工业出版社 ISBN:9787121201202 上架时间:2013-8-5 出版日期 ...