转载请注明:

仰望高端玩家的小清新

使用 struts 的时候我们自己设计的action毕竟是有限的,那么我们就需要使用一种方法来限制用户输入未定义的action。

网上很多解决方案都是一个抄一个,没有自己的实践和总结。虽然我预感到很快我的这篇博客又会被爬虫盗走,不过还是写出来,给需要帮助的新人一点微小的贡献,少走一些弯路。

众所周知,struts 2.5 是支持注解配置的,因此我们当然应该尽可能遵循简单的原则。因此这篇博客是尽可能使用注解进行配置的。注解和 xml 配置各有利弊,因此通常我们需要结合使用注解和 xml。

我们直到,当我们访问未定义页面时,会出现报错,大意是找不到一个名为 XXX 的action。如何处理呢?经过我自己的测试和思考,我发现这是 struts 2 内部的 com.opensymphony.xwork2.config.ConfigurationException 的错误。我们如果使用 struts 自己的 <global-excepton-mappings/> 是无法捕获的。也就是说,struts 2 只能捕获后端抛出的异常,而对自身的异常无法简单的通过配置来捕获和处理。

那么问题来了,当用户访问一个不存在的aciton,如何跳转到友好的 404 页面呢?

基本的思路是:定义一个默认 action, 当找不到一个指定 action 时,就进入这个 action 并跳转到友好的 404 页面。

如果是基于 xml 配置,那我们随手一找,就能找到一大堆,我就不赘述了。

如果是基于注解,那么我们需要这么做:

1. 写一个 action 方法,专门处理上述情况

2. 将 action 的 result 指向我们指定的友好的 404 界面

3. 切记,不要在 xml 进行上述操作,而要将这个方法写在 java 类中

4. 在 xml 中配置一个默认的 package, 让所有 package 继承此 package,然后在这个默认的 package 中,引用 我们刚刚写好的 action 作为默认 action,然后就 ok 了。

实例如下:

在这个例子中,我的action 名称为 noSuchAction,是一个基于注解的 action

<package name="myDefault" namespace="/" extends="struts-default">
<default-action-ref name="noSuchAction"/>
</package>

  

struts 2.5 访问未定义 action 时报错的问题的更多相关文章

  1. 在ERP中定义用户时报错:SqlDateTime 溢出。必须介于 1/1/1753 12:00:00 AM 和 12/31/9999 11:59:59 PM 之间

    在ERP中定义用户时.   报错: SqlDateTime 溢出.必须介于 1/1/1753 12:00:00 AM 和 12/31/9999 11:59:59 PM 之间. 原因分析: ①没有正确初 ...

  2. OVF3为订单原因分配成本中心时报错“成本中心未定义”,消息号:VT806

    问题:OVF3为订单原因分配成本中心时报错“成本中心未定义”,消息号:VT806.KS03检查成本中心数据是已经建立的. 原因:OVF3往右边拉动,还有一个需要填入的字段“有效起始日”,此字段值必须在 ...

  3. 错误: “WebForm_DoPostBackWithOptions”未定义

    无论是ASP.NET WebForm 还是 ASP.NET MVC项目,在本地程序测试没问题,但是部署在IIS上访问就会出现  错误: “WebForm_DoPostBackWithOptions”未 ...

  4. .Net4.0的网站在IE10、IE11出现“__doPostBack未定义”的解决办法。

    方法一.浏览器设置成兼容模式. 方法二.安装服务器版的.Net40的补丁.http://download.csdn.net/detail/5653325/6642051 方法三.点击VS的工具菜单-- ...

  5. .NET4.0 __doPostBack未定义

    方法一.浏览器设置成兼容模式. 方法二.安装服务器版的.Net40的补丁.http://download.csdn.net/detail/5653325/6642051 方法三.点击VS的工具菜单-- ...

  6. IE11出现“__doPostBack未定义”的解决办法。

    方法一:浏览器设置成兼容模式,这个是超级掩耳盗铃方法,你就没想过其他人也会出这个问题. 方法二.安装服务器版的.Net40的补丁.http://download.csdn.net/detail/565 ...

  7. IE10、IE11出现“__doPostBack未定义”的解决办法。

    方法一:浏览器设置成兼容模式,这个是超级掩耳盗铃方法,你就没想过其他人也会出这个问题. 方法二.安装服务器版的.Net40的补丁.http://download.csdn.net/detail/565 ...

  8. IE10-IE11在NET4.0下出现“__doPostBack未定义”解决方案

    IE10在NET4.0下出现"__doPostBack未定义"的办法 参考文章: http://blogs.msdn.com/b/scott_hanselman/archive/2 ...

  9. Aaja.pro 未定义

    问题描述:安装新系统后,将代码迁至新系统,所有用到ajaxpro框架调用ajax方法时均报“xx未定义”的错: 解决问题的过程 : 1.看看你在前台调用的方法的命名空间,方法名和后台的是否对应.在后台 ...

随机推荐

  1. Mac Java配置JAVA——HOME

    命令行中输入:  export JAVA_HOME=$(/usr/libexec/java_home) 

  2. Numpy array学习笔记

  3. BZOJ day2_plus

    大半夜的刷b站,好爽啊... 突破十九题 1008105110591088117911911192143218761951196821402242243824562463276128184720

  4. 无人值守安装linux系统

    需要使用到的服务:PXE + DHCP+TFTP+ Kickstart+ FTP KickStart是一种无人职守安装方式 执行 PXE + KickStart安装需要准备内容:  • DHCP 服务 ...

  5. 如何解析Json返回的数据

    Json在Web开发的用处非常广泛,作为数据传递的载体,如何解析Json返回的数据是非常常用的.下面介绍下四种解析Json的方式: Part 1 var list1 = [1,3,4]; alert( ...

  6. MySQL使用笔记(四)数据的操作

    By francis_hao    Dec 14,2016 数据的操作包括插入数据记录.更新数据记录和删除数据记录. 插入数据记录 插入单条数据记录 field表示的字段名和value表示数据要一一对 ...

  7. Codeforces Round #520 (Div. 2) A. A Prank

    A. A Prank time limit per test   1 second memory limit per test    256 megabytes 题目链接:https://codefo ...

  8. Git命令文本手册

    git init # 初始化本地git仓库(创建新仓库) git config --global user.name "xxx" # 配置用户名 git config --glob ...

  9. 对比append插入数据产生的redo量

    --版本信息 SELECT * FROM v$version; Oracle - Prod PL - Production CORE Production TNS - Production NLSRT ...

  10. [bzoj2038][2009国家集训队]小Z的袜子(hose)——莫队算法

    Brief Description 给定一个序列,您需要处理m个询问,每个询问形如[l,r],您需要回答在区间[l,r]中任意选取两个数相同的概率. Algorithm Design 莫队算法入门题目 ...