使用Struts2时候报异常
WARNING: Caught OgnlException while setting property 'location' on type
'org.apache.struts2.dispatcher.ServletDispatcherResult'.
java.lang.IllegalAccessException: Method [public void
org.apache.struts2.dispatcher.StrutsResultSupport.setLocation(java.lang.Str ing)]
cannot be accessed.
at ognl.OgnlRuntime.invokeMethod(OgnlRuntime.java:508)
at ognl.OgnlRuntime.callAppropriateMethod(OgnlRuntime.java:812)
SEVERE: ParametersInterceptor - [setParameters]: Unexpected Exception
caught setting 'name' on 'class com.ociweb.gaestruts2.HelloAction: Error
setting expression 'name' with value '[Ljava.lang.String;@24de7d'
解决方法:
1. 建class如下..............
#、%和$符号在OGNL表达式中经常出现,而这三种符号也是开发者不容易掌握和理解的部分。在这里笔者简单介绍它们的相应用途。
1.#符号的用途一般有三种。
1)访问非根对象属性,例如示例中的#session.msg表达式,由于Struts 2中值栈被视为根对象,所以访问其他非根对象时,需要加#前缀。实际上,#相当于ActionContext. getContext();#session.msg表达式相当于ActionContext.getContext().getSession(). getAttribute(”msg”) 。
2)用于过滤和投影(projecting)集合,如示例中的persons.{?#this.age>20}。
3)用来构造Map,例如示例中的#{'foo1':'bar1','foo2':'bar2'}。
2.%符号................
国际化是商业系统中不可或缺的一部分,所以无论您学习的是什么Web框架,它都是必须掌握的技能。 其实,Struts 1.x在此部分已经做得相当不错了。它极大地简化了我们程序员在做国际化时所需的工作,例如,如果您要输出一条国际化的信息,只需在代码包中加入FILE-NAME_xx_XX.properties(其中FILE-NAME为默认资源文件的文件名),然后在struts-config.xml中指明其路径,再在页面用<bean:message>标志输出即可。 不过,所谓“没有最好,只有更好”。Struts 2.0并没有在这部分止步,而是在原有的简单易用的基础上,将其做得更灵活、更强大。 下面让我们看一个例子——HelloWorld。这个例子演示如何根据用户浏览器的设置输出相应的HelloWorld。.........国际化Hello World
第一部分 Struts入门
第一章 Struts2 概览(beta)
第二章 一个简单的Login 应用程序(beta)
Struts 2 概要
第三章Struts配置(beta)
第三章 Struts配置(第一节 struts.properties配置)
第三章 Struts配置(第二节 Actin配置)
第三章 Struts配置(第三~七节其他配置)
第四章 Tablib Struts标签库
4.1节 通用标签
4.2节 UI标签
4.3节 主题和模板
4.4节 AJAX标签(试验阶段)
4.5节 OGNL
4.6节 Tag 语法
4.7 JSP,Freemarker和Velocity
第五章 Validation(beta)
Struts2 校验详细比较(XML配置部分,包含服务端校验,客户端纯JavaScript校验,Ajax校验)....
<action .... class="org.sandbox.base.struts.sys.{1}Action" ....>,这里的{1}是最棒的,可以根据actionName寻找并加载相应的Action Class。
系统中,总存在一些简单的对象,需要提供CRUD功能,如果把它们都放在同一个namespace中,并按照同样的模式进行实现,则只需要上述一个配置文件就够了。
同时,通过这种配置,如struts的doc所描述,同时可以避免暴露Action类的方法,提高安全性。
有两点小小缺憾:
在上篇文章中,我们已经从较高层解释了整个框架的结构,请求流程的基础,配置方式和Struts2和Struts1的不同之处。了解这些后从Struts 应用 迁移到 Struts 2 不再是难事。
在这篇文章中,我们将会更详细地讲述如何由Struts 的action转为Struts 2的action。
一个应用的例子
这个例子选择了大家都熟悉的 - weblog. 简单地介绍下这例子的功能需求:
增加一个新的日志
增删修改(CRUD),是项目中最为普遍的应用。
总结
我们并不可能在这篇文章中覆盖所有的内容,如果你需要更好的了解整个框架,还有其他的实现方式和选项,这里有几点可以供你参考:
也许到现在为,也许你有个疑问,"迁移后我们的界面是否可以完全重用呢?",答案是yes。你能从这里, 下载到我这篇文章中的完整源代码,你可以自己尝试把URL的扩展名由".do" 改为 ".action",使用的页面时一样的。除此之外,其实用JSTL来代替Struts taglib也是很容易的。
在下一篇文章中,我们将讲述用户界面,讨论themes 和 tags; 如何做validation; 如何重用UI控件。
有很多人都很熟悉 Struts, 无论是从项目中直接获得的实战经验还是从书中了解到的。我们这一系列文章,将通过一个由 Stuts 转移到 Struts2 简单的例子向大家展现Struts2的所有特征。
在我们开始这个例子之前,你需要去知道一点 Struts2的背景知识。 在第一部分的文章中,我们将介绍Struts2与Struts的核心框架的不同点,以助于更好地了解其他方面的整合。第二部分中,我们将深入探讨 actions 的差别, action相关的框架特征,和action配置。在最后一部分中,我们将会讲述 user interface,我们也会讲到其架构,UI构件,themes 和标签。 还有如何为你的应用加上新的外观。
我们并不打算谈及迁移过程的所有细节方面,我们只是从出发点开始介绍Struts2 的概念和现在可用的所有特征。但拥有这些知识,你将在以后Struts2的应用中无往而不利。
Struts的历史
Struts的第一个版本 是在 2001年5月份发布。它提供了一个Web应用的解决方案,如何让 JSPs 和 servlets 共存去提供清晰的分离视图和业务和应用逻辑的架构。在Struts之前,最通常的做法是在JSP中加入业务和应用逻辑,或者在servlets中生成视图。
自从第一个版本的发布, Struts 实际上已成为业界公认的Web应用标准。但随着时间的推移,Web应用框架经常变化的需求,产生了几个下一代 Struts的解决方案。其中两个可选方案是Shale 和 Struts Ti。 Shale 是一个基于构建的框架,并在最近成为 Apache 中的重要项目。而 Struts Ti 则是继续坚持 MVC模式的基础上改进,继续Struts的成功经验。
WebWork项目是在2002年3月发布的,它对Struts式框架进行了革命性改进,引进了不少新的思想,概念和功能,但和原Struts代码并不兼容。WebWork是一个成熟的框架,经过了好几次重大的改进与发布。在2005年12月,WebWork与Struts Ti决定合拼, 再此同时, Struts Ti 改名为 Struts Action Framework 2.0,成为Struts真正的下一代。
想用 方法名 + .do 的方法直接访问Action中的方法,可以一直访问不到,出现 no mapped 的错误. 测试几次,把问题锁定在 struts.properties 配置文件中.
经过查阅该配置的详解之后,发现一项配置我没有.加上之后就好了.
引用
struts.enable.SlashesInActionNames
该属性设置Struts 2是否允许在Action名中使用斜线,该属性的默认值是false。如果开发者希望允许在Action名中使用斜线,则可设置该属性为true。
原因是,我在配置Action的时候,name中间带有 "/":
......................