论坛首页 Java企业应用论坛

『错误』webwork中从Action转发到Action错误

浏览 4586 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2006-08-05  
<action name="viewaddclass"
class="ViewAddClassInfoAction">
<result name="success" type="dispatcher">
<param name="location">
/admin/class/add_class.jsp
</param>
</result>
</action>

<action name="viewclasslist"
class="ViewClassInfoListAction">
<result name="success" type="dispatcher">
<param name="location">
/admin/class/manager_class.jsp
</param>
</result>
</action>

<action name="addclass"
class="AddClassInfoAction">

             <interceptor-ref name="fileUpload"/>
<interceptor-ref name="model-driven" />
<interceptor-ref name="params" />

<result name="success" type="redirect">
<param name="location">
/admin/class/viewclasslist.action
</param>
</result>
<result name="formerror" type="dispatcher">
<param name="location">
/admin/class/viewaddclass.action
</param>
</result>
</action>
在AddClassInfoAction中如果遇到错误就转发到/admin/class/viewaddclass.action,这样会抛出找不到该页的异常,异常如下
HTTP Status 404 - /jwnews/admin/class/viewaddclass.action

--------------------------------------------------------------------------------

type Status report

message /jwnews/admin/class/viewaddclass.action

description The requested resource (/jwnews/admin/class/viewaddclass.action) is not available.

如果重定向就好使.
   发表时间:2006-08-05  
用redirect-action
0 请登录后投票
   发表时间:2006-08-06  
redirect-action是重定向,用这个取不出在action保存到request里的值
0 请登录后投票
   发表时间:2006-08-06  
chain拦截器,不过这个不会改变URL
0 请登录后投票
   发表时间:2006-08-07  
你的location参数里不能加/ 的,那样是根目录,你的webapp是子目录的,就会找不到了。
0 请登录后投票
   发表时间:2006-08-07  
龙泽风 写道
<action name="viewaddclass"
class="ViewAddClassInfoAction">
<result name="success" type="dispatcher">
<param name="location">
/admin/class/add_class.jsp
</param>
</result>
</action>

<action name="viewclasslist"
class="ViewClassInfoListAction">
<result name="success" type="dispatcher">
<param name="location">
/admin/class/manager_class.jsp
</param>
</result>
</action>

<action name="addclass"
class="AddClassInfoAction">

             <interceptor-ref name="fileUpload"/>
<interceptor-ref name="model-driven" />
<interceptor-ref name="params" />

<result name="success" type="redirect">
<param name="location">
/admin/class/viewclasslist.action
</param>
</result>
<result name="formerror" type="dispatcher">
<param name="location">
/admin/class/viewaddclass.action
</param>
</result>
</action>
在AddClassInfoAction中如果遇到错误就转发到/admin/class/viewaddclass.action,这样会抛出找不到该页的异常,异常如下
HTTP Status 404 - /jwnews/admin/class/viewaddclass.action

--------------------------------------------------------------------------------

type Status report

message /jwnews/admin/class/viewaddclass.action

description The requested resource (/jwnews/admin/class/viewaddclass.action) is not available.

如果重定向就好使.

看过了你冗长的配置之后,觉得你还没有领略WebWork设计的精华:
首先,“dispatcher”结果类型是转发到JSP页面,location参数的意义就是JSP页面的位置(相对或者绝对[相对于站点根目录]),类似地,“freemarker”结果类型是转发到FTL模板页面,等等,所以,你的配置有问题,改正如下:
………………
<result name="formerror" type="dispatcher">
        <param name="location">/admin/class/add_class.jsp</param>
</result>
………………
如果location是唯一的一个参数,可以简写为:
………………
<result name="formerror" type="dispatcher">admin/class/add_class.jsp</result>
………………
还有我不清楚,你为什么要自定义结果类型名:formerror,Action接口中有
ERROR = "error";
INPUT ="input";
这些你可以直接用的啊?
type="dispatcher"也是默认的结果类型,你也可以省略(当然你可以定义其他的为默认结果类型)。
我不提倡每个功能方法用一个Action来实现,这样Action会很多,你可以考虑不实现Action接口,而是继承ActionSupport类,在一个Action中,写多个方法,进入输入页面,譬如“admin/class/add_class.jsp”,你根本不需要写什么方法,可以这样调用,addclass!input.action,会调用doInput()方法,进入input页面(见下面配置),
public class ClassInfoAction extends ActionSupport {
     
      private ClassInfo classInfo;
      private List classInfoList;
      //Setters and Getters
      
      public void addClassInfo(); throws Exception {
            try {
                  save(classInfo);.....;
                  addActionMessage("添加类别成功!");;
            } catch(Exception e); {
                  addActionError(e.getMessage(););;
                  return INPUT;
            }
            return SUCCESS;
      }

      public void listClassInfo(); throws Exception {
            classInfoList = ...
            return SUCCESS;
      }

}


xwork.xml配置:
<action name="addclass" class="ClassInfoAction" method="addClassInfo">
            <interceptor-ref name="fileUpload"/>
            <interceptor-ref name="default-stack" />
            <result name="success" type="redirect-action">listclass</result>
            <result name="input">/admin/class/add_class.jsp</result>
</action>

<action name="listclass" class="ClassInfoAction" method="listClassInfo">
            <result name="success" >/admin/class/manager_class.jsp</result>
</action>


OK,祝你好运!
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics