Struts.xml中Action的method与路径的三种匹配方法

原文  http://blog.csdn.net/woshixuye/article/details/7734482

首先我们有一个Action——UserAction

public class UserAction extends ActionSupport 

    public String add() 
    { 
        return "add"; 
    }

    public String modify() 
    { 
        return "modify"; 
    } 
}


1 指定method

<package name="user" namespace="/userPath" extends="struts-default"> 
   <action name=" userAdd " class="com.xy.UserAction" method="add"> 
    <result name="add">add.jsp</result> 
   </action> 
   <action name=" userModify " class="com.xy.UserAction" method="modify"> 
    <result name="modify">modify.jsp</result> 
   </action> 
</package>

路径: 
userPath/userAdd 
userPath/userModify

特点: 
不灵活,CRUD四个操作就要配4个action。

 

 

2 动态方法调用DMI(Dynamic Method Invocation)

<package name="user" namespace="/userPath" extends="struts-default"> 
   <action name="user" class="com.xy.UserAction"> 
    <result name="add">add.jsp</result> 
 <result name="modify">modify.jsp</result> 
   </action> 
</package>

路径: 
userPath/user!add 
userPath/user!modify

特点: 
灵活。只要指定不同的方法就可以做不同的操作。

 

 

3 通配符

<package name="all" namespace="/" extends="struts-default"> 
   <action name="*_*" class="com.xy.{1}Action" method="{2}"> 
 <result name="add">{1}_add.jsp</result> 
 <result name="modify">{1}_modify.jsp</result> 
   </action> 
</package>

路径: 
User_add 
User_modify

特点: 
更加灵活。整个项目甚至只要配一个总的action。是指定方法的一个特殊的用法。不过我觉得用DMI可以将每个模块分的清楚。

推荐的方法是动态调用,也就是DMI.

 注意的问题:

1.比如在地址栏中输入URL:http://localhost:8080/struts2/front/helloword!add

但是:如果这样输入的话,会报错(There is no Action mapped for namespace [/front] and action name [helloword!add()] associated with context path [/Struts2_10003].)
因为:struts2中默认不允许使用DMI

所以:需要在配置文件中打开: <constant name="struts.enable.DynamicMethodInvocation" value="true"/>这样大家在地址栏动态输入就可以得到预期的页面

2.如果想要利用DMI的方式传递参数的话:userPath/user!add?flag=true

转载于:https://www.cnblogs.com/hujunzheng/p/4603207.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/531479.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

VS2017安装配置Qt

这篇文章作为qt的开发环境配置篇&#xff0c;记录如何在vs2017中安装qt的 所需软件下载链接如下&#xff1a; QT下载链接&#xff1a;QT visual studio下载链接&#xff1a;visual studio 这里推荐安装最新的&#xff0c;原因是vs2017不支持一些老版本的makefile文件生成&#…

Qt Creator 常用快捷键

掌握一些适用的快捷键&#xff0c;可以提高程序开发的效率。 快捷键功能F4在同名的头文件和源程序文件之间切换F2跟踪光标下的符号&#xff0c;若是变量&#xff0c;可跟踪到变量声明的地方&#xff1b;若是函数体或函数声 明&#xff0c;可在两者之间切换ShiftF2在函数的声明…

Hibernate学习之hibernate.cfg.xml

<?xml version1.0 encodingUTF-8?><!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <!-- 正文开始 --> <h…

STM32位带区和位带别名区的浅谈

1.首先谈下为什么要使用位带&#xff1f; 在学习51单片机时就已经使用过位操作&#xff0c;比如使用sbit对单片机IO口的定义&#xff0c;但是STM32中并没有这类关键字&#xff0c;而是通过访问位带别名区来实现&#xff0c;即通过将每个比特位膨胀成一个32位字&#xff0c;当访…

Hibernate的数据查找,添加!

1.首先看一下测试数据库的物理模型 2.测试所需要的Hibernate的jar包 3.数据库的sql /**/ /* DBMS name: MySQL 5.0 */ /* Created on: 2015/7/3 23:17:57 */ /**/drop table if exists books;drop tab…

新手如何在Altium Designer中绘制电路板

好久没用AD画电路板了&#xff0c;这次电子实训让画个PCB板&#xff0c;借着这个机会写了一篇新手教程。 此教程所用的电路图是自动循迹小车&#xff0c;虽然元件比较简单&#xff0c;但是感觉还是很厉害的&#xff0c;一块看一下吧。 此教程仅适用于没有基础的同学 一、概述 …

Hibernate的数据删除,更改

其他未给出代码&#xff0c;请参考上一篇.... 一.数据的删除 方法1.从“多”的一方进行数据的删除 books.hbm.xml文件不变&#xff1a; <many-to-one name"publishers" column"publisherId" class"com.entry.Publishers" lazy"false&quo…

STM32的AFIO时钟什么时候开启?

问题描述 在使用STM32的USART2时发现AFIO时钟无论打不打开串口都能正常工作 带着这个问题网上搜集了一些资料&#xff0c;由于我对这块的理解并不是很深&#xff0c;如果有错误欢迎指正 首先为什么要开启时钟&#xff1f; 答&#xff1a;因为STM32几乎所有的外设都有独立的时…

Qt模仿QQ登录界面(一)

这两天研究qt&#xff0c;练习时做了个仿QQ登录界面&#xff0c;我这次实现的比较简单&#xff0c;先在这里记录一下&#xff0c;以后有空了会继续完善的。 &#xff08;一&#xff09;效果图 这里使用我的qq号测试的如图&#xff1a; &#xff08;二&#xff09;工程文件 &…

n维数组实现(可变参数表的使用)

首先先介绍一下可变参数表需要用到的宏&#xff1a; 头文件&#xff1a;#include<cstdarg> void va_start( va_list arg_ptr, prev_param ); type va_arg( va_list arg_ptr, type ); void va_end( va_list arg_ptr ); va_list:用来保存宏va_start、va_arg和va_end所需信息…

回流焊和波峰焊的区别

本文首先分别介绍回流焊和波峰焊的特点&#xff0c;然后对两者进行比较&#xff0c;欢迎评论补充哦~ 最近在实习看到了厂里面的回流焊的波峰焊&#xff0c;有点好奇就查了点资料&#xff0c;分享给同样爱学习的你。 一.回流焊 一般的表面贴装工艺分三步&#xff1a;印刷机施加…

三对角矩阵的压缩

三对角矩阵&#xff0c;从第二行开始选中的元素的个数都为3个。对于a[i,j]将要存储的位置k&#xff0c;首先前(i-1)行元素的个数是(i-2)*3 2(第一行元素的个数为2)&#xff0c;又a[i,j]属于第i行被选中元素的第j-i1个元素&#xff0c;所以k (i-2)*3 2 j-i1 2*ij-3 如果知道了…

LC和RC滤波电路分析

一、概述 整流电路的输出电压并不是纯粹的直流&#xff0c;从示波器观察整流电路的输出&#xff0c;与直流相差很大&#xff0c;波形中含有较大的脉动成分&#xff0c;称为纹波。为了获得比较理想的直流电压&#xff0c;需要利用具有储能作用的电抗性元件(如&#xff1a;电感、…

dev c++ Boost库的安装

dev c 的boost库的安装步骤 然后点击“check for updates”按钮 最后点击“Download selected”按钮&#xff0c;下载完成后安装.... 给dev添加boost库文件&#xff0c;找到之前安装的目录 #include<iostream> #include<string> #include<cstring> #include…

(一)C语言之数据类型

在这里主要讲了基本的知识&#xff0c;具体练习时注意用代码看看数据存储的位数和大小&#xff0c;像char a127;aa1;这时候a的值。可以用sizeof查看数据类型占的字节数。以及不同数据类型之间如何自动转换和强制转换&#xff0c;还有printf和scanf的具体用法&#xff0c;多动手…

十字链表的应用

#include<iostream> #include<cstring> #include<cstdio> #include<cstdlib> #define MAX_VERTEX_NUM 20 using namespace std; typedef struct ArcBox{int tailVex, headVex;//该弧的尾和头顶点的位置 struct ArcBox *hlink, *tlink;//分别为弧…

(二)C语言数据类型(2)

今天主要总结了一下运算符&#xff0c;详细介绍了运算符分类和优先级的基本知识 欢迎加入嵌入式学习群&#xff1a;559601187 运算符按操作数可以分为&#xff1a;单目运算符、双目运算符和三目运算符&#xff0c;优先级依次为单目运算符>双目运算符>三目运算符,在c语言里…

AOE网的关键路径的计算

求关键路径&#xff0c;只需理解顶点&#xff08;事件&#xff09;和边&#xff08;活动&#xff09;各自的两个特征属性以及求法即可&#xff1a; 先根据首结点的Ve(j)0由前向后&#xff08;正拓扑序列&#xff09;计算各顶点的最早发生时间 再根据终结点的Vl(j)等于它的V…

(三)C语言之九条语句

今天来说一下我们以后可能用的最多的C语言语句&#xff1a;条件语句、循环语句、控制语句。理论很简单&#xff0c;注重多自己写代码才能熟练运用。 欢迎加入嵌入式学习群&#xff1a;559601187 一起愉快的玩耍啊~ &#xff08;一&#xff09;条件语句 &#xff08;1&#xff…

C语言之getchar()用法

(1)语法 int getchar(void);(2)返回值 getchar函数的返回值是用户输入的第一个字符的ASCII码,如出错返回-1,且将用户输入的字符回显到屏幕.如用户在按回车之前输入了不止一个字符,其他字符会保留在键盘缓存区中,等待后续getchar调用读取.也就是说,后续的getchar调用不会等待用…