2013年2月18日 晴
被一个bug搞得我发神经,不过经过认真搜索,最后还是找到解决方案,这样才得以让小巫继续学习下去。
Struts2 第17part Dynamic Result动态结果集
之前,关于Action的动态方法调用,已经接触过动态这个概念了。然而动态结果又是怎么进行配置的呢? 关键还是在struts.xml配置文件当中。
先来说说自己遇到的bug是什么吧,动态配置结果用到的是OGNL表达式,项目原本是这样配置的。
- <action name="user" class="com.bjsxt.struts2.user.action.UserAction">
- <result>${r}</result>
- </action>
result标签里的用${r}这样的表达式来动态指定下一个Action,原本照这样配置,应该是没有什么问题的。但就是出错,之前以为是Struts2的版本问题,然后就去Web.xml修改Filter.但还是无济于事,最后上网查了很久,最终找到一个能解决自己问题的文章,自己稍微修改了一下,问题就这样解决了。
完整的struts.xml代码如下:
- <?xml version="1.0" encoding="UTF-8" ?>
- <!DOCTYPE struts PUBLIC
- "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
- "http://struts.apache.org/dtds/struts-2.0.dtd">
- <struts>
- <constant name="struts.devMode" value="true" />
- <package name="user" namespace="/user" extends="struts-default">
- <action name="user" class="com.wwj.struts2.user.action.UserAction">
- <result>${r}.jsp</result>
- </action>
- </package>
- </struts>
我是将${r}改为${r}.jsp, 然后问题就解决了,感觉有点扯。对吧。
当然UserAction也要做相应的修改,把jsp后缀去掉就ok了。
- package com.wwj.struts2.user.action;
- import com.opensymphony.xwork2.ActionSupport;
- public class UserAction extends ActionSupport {
- private int type;
- private String r;
- public String getR() {
- return r;
- }
- public void setR(String r) {
- this.r = r;
- }
- public int getType() {
- return type;
- }
- public void setType(int type) {
- this.type = type;
- }
- @Override
- public String execute() throws Exception {
- // TODO Auto-generated method stub
- if(type == 1) r="/user_success";
- else if (type == 2) r="/user_error";
- return "success";
- }
- }
就这样,关于动态结果集配置的内容就这么多。我发现下面几个项目也是同样的问题。不过已经知道问题所在,我想应该能轻松解决。