我在使用strut2进行学习,使用freemarker作为view层的技术。我在编写一个简单的人员增加例子时,需要从数据库中获得目前科室的列表和准备其他数据后,action返回success,然后在配置文件中将result转向为ftl文件,都没有问题。但是当我输入信息不合法后,会自动进行类型转换,然后失败,会返回input执行结果,然后按照我的设定回执行我希望的action,但是我发现struts并不会执行我的action,而是直接调用我设置action中的结果input中的ftl,这样根本就不会调用准备数据的那一段代码,导致ftl的显示失败。
struts.xml
<action name="addPersonEntry" class="personAct" method="addPersonEntry">
<result name="input" type="freemarker">/person/addPersonEntry.ftl</result>
</action>
<action name="addPerson" class="personAct" method="addPerson">
<result name="success" type="chain">listPerson</result>
<result name="input" type="chain">addPersonEntry</result>
</action>
aciont
public String addPersonEntry() {
//获得科室列表,给ftl文件准备数据
depts = service.getAllDept(new HqlConfig("zorder" , true));
return INPUT;
}
public String addPerson() {
service.savePerson(person);
ActionContext.getContext().put("runMsg", "人员增加成功!" + person.toString());
return SUCCESS;
}
不知道我表达清楚没有,我看的例子都是出现类型转换错误后,转向到jsp,这样在jsp中利用DAO或service来获得数据,但是我使用ftl作为view层,只有在action准备数据后才能正确显示,我奇怪的是为什么strtus框架不执行action而直接就到<action>...下的result进行匹配。不知道是不是的我的使用方法有问题,希望得到大家的帮助,在google上搜索很久,未果。
第一次调用addPersonEntry.action能正常显示输入页面,输入不合法的内容后,按照我的设定
<result name="input" type="chain">addPersonEntry</result>
应该跳转到addPersonEntry.action,然后执行我的public String addPersonEntry() 方法。根据此方法的返回值"input"将数据装载到ftl模板中,但实际情况是public String addPersonEntry() 方法没有执行,直接去按照
<result name="input" type="freemarker">/person/addPersonEntry.ftl</result>
去显示ftl的内容,由于没有数据出错。
如果我正确的输入信息,并且返回input,struts就会按照设定的去执行action中的方法。
如果type="chain" 修改为 "redirectAction" 是会执行action中的方法,但是前一个request中的内容都没有了。
我的环境是struts2.0.14 , freemarker 2.3.8 。
自己再顶,发现了一些链接和我说的问题一样,但还不知道如何解决。
http://www.iteye.com/problems/9889和
http://topic.csdn.net/u/20090305/12/14d84d77-6219-4967-a89e-2b782da49755.html?seed=133833307
自问自答吧。问题解决。还是自己对struts的理解不够。
代码都没有问题,只是使用的缺省的拦截器导致的结果。由于出现错误后,使用chain转向到默认的拦截器去处理。
经过测试发现是默认的拦截器加载的太多,我将workflow拦截器去除后就工作正常了。一想也对,当输入端有action Error后,经过拦截器后发现就自动跳转,并不去执行自己的action。这应该也是拦截器的原理吧。
修改后的struts.xml如下。
<action name="index" class="indexAction">
<interceptor-ref name="chain" />
<interceptor-ref name="basicStack" />
<result name="success" type="freemarker">...</result>
<result name="input" type="freemarker">...</result>
</action>
完整的解决过程,希望能对其他人有所帮助,自立才能自强。
感谢Winking赟钦网友的帮助。
分享到:
相关推荐
2. **xwork-core.jar**:XWork是Struts2的基础,它提供了一些基础功能,如类型转换、Ognl表达式支持、拦截器机制等。很多Struts2的功能都是基于XWork实现的。 3. **ognl.jar**:OGNL(Object-Graph Navigation ...
10. **类型转换和插件**:Struts2具有强大的类型转换能力,可以自动将请求参数转换为Action属性。此外,通过插件机制,可以轻松地扩展Struts2的功能,如集成Spring、Hibernate等。 通过深入理解和实践这些知识点,...
Struts2 Result类型是Struts2框架中一个关键的概念,它是控制Action执行后响应到何处的重要组件。在处理用户请求并执行相应的业务逻辑后,Action需要将结果返回给客户端,而Result类型就是用来定义这个返回过程的...
org.apache.struts2.views.freemarker.FreemarkerResult 16 httpheader 16 控制特殊http行为的结果类型 16 org.apache.struts2.dispatcher.HttpHeaderResult 16 stream 16 向浏览器发送InputSream对象,通常用来处理...
2. `xwork-core.jar`:XWork是Struts2的基础,提供了类型转换、数据验证和拦截器等功能。 3. `ognl.jar`:Object-Graph Navigation Language (OGNL) 是Struts2中的表达式语言,用于在视图和模型之间传递数据。 4. `...
此外,文档还介绍了Object-Graph Navigation Language (OGNL),这是Struts2中的表达式语言,用于数据绑定和类型转换。在进行数据校验方面,Struts2提供了一套内置的验证机制,确保了输入数据的正确性。Web项目国际化...
- `xwork-core.jar`:XWork是Struts2的基础,提供了许多底层的机制,如类型转换、参数验证、异常处理等。 4. **其他支持库**: - `commons-logging.jar`:通用的日志接口,Struts2通过它来记录运行时信息。 - `...
2. **配置 Struts**:创建 `struts-config.xml` 文件,配置 Action 类及其对应的视图,定义拦截器和数据源等。 3. **配置 Spring**:创建 `applicationContext.xml` 文件,声明并管理 Bean,包括 Dao、Service 层的...
### Struts2入门教程知识点详解 #### 一、环境搭建与...记住,Struts2的强大之处在于它的灵活性和扩展性,你可以通过学习更多的特性(如拦截器、国际化、自定义类型转换器等)来进一步提高你的开发效率和应用性能。
5. 方法执行完毕,根据返回值决定转向哪个结果页面,这通常通过配置在`struts.xml`中的结果类型和名称来实现。 6. 最后,Struts2会根据配置将控制权交给相应的视图,展示结果。 了解Struts2的执行原理对于理解和...
- 结果(Result)定义了Action执行后如何转向视图,如JSP、Freemarker、Velocity等。 - 有多种结果类型,如ACTION、FORWARD、REDIRECT、CONTINUATION等,满足不同场景需求。 - 全局结果可以在包级别定义,作为...
3. 结果转发:Action执行完成后,根据返回的结果码,Struts2会将控制权转向指定的视图(JSP页面)。 4. 国际化支持:提供国际化资源文件,可以方便地实现多语言环境下的应用。 5. 模板技术:Struts2支持FreeMarker...
在Struts2中,当一个Action执行完毕后,它会根据Action返回的字符串(通常是"success"或"error")来决定下一步的动作。这个过程通过`result`配置来实现,`result`定义了Action执行完成后应转向何处,或如何处理结果...
10. **Plug-in机制**: Struts 2支持插件扩展,允许开发者添加自定义功能,如表单验证、数据类型转换等。 11. **OGNL (Object-Graph Navigation Language)**: Struts 2默认使用OGNL作为表达式语言,用于在Action和...
Struts2是一个基于MVC...然而,值得注意的是,Struts2自2.5版本后已停止更新,社区推荐转向更现代的框架如Spring Boot。尽管如此,理解Struts2的架构和组件仍然是学习Java Web开发历史和理解现有系统的重要部分。
这些文件包括:commons-beanutils、commons-collections、commons-digester、commons-lang、commons-logging、dom4j、ezmorph、freemarker、javassist、json-lib、log4j、ognl、struts2-core、xml-apis 和 xwork。...
10. **类型转换**:Struts2自动将请求参数转换为Action类的属性,提供了强大的类型转换机制。 11. **插件扩展**:Struts2具有丰富的插件系统,如Tiles、Freemarker、i18n等,可以方便地集成到项目中。 通过上述...
总结来说,Struts2是一个强大的MVC框架,它通过非侵入式设计、拦截器、类型转换和丰富的验证机制提供了高效的Web应用开发体验。了解和掌握Struts2的配置和使用方式,对于Java Web开发人员来说是非常重要的技能。
类型转换器自动处理请求参数类型;多样化的表现层技术支持,如JSP、FreeMarker、Velocity;以及更灵活的输入验证和国际化资源管理。 Spring框架在SSH中扮演了业务层的角色,它不仅管理Service层的Bean,还负责服务...