首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

Struts2:莫名其妙的There is no Action 地图ped for namespace 异常

2012-09-20 
Struts2:莫名其妙的There is no Action mapped for namespace 错误。There is no Action mapped for namesp

Struts2:莫名其妙的There is no Action mapped for namespace 错误。

There is no Action mapped for namespace XXXXXXXXXXXX and action name login. - [unknown location]     com.opensymphony.xwork2.DefaultActionProxy.prepare(DefaultActionProxy.java:186)    org.apache.struts2.impl.StrutsActionProxyFactory.createActionProxy(StrutsActionProxyFactory.java:41)    org.apache.struts2.impl.StrutsActionProxyFactory.createActionProxy(StrutsActionProxyFactory.java:34)    com.opensymphony.xwork2.ActionChainResult.execute(ActionChainResult.java:225)    com.opensymphony.xwork2.DefaultActionInvocation.executeResult(DefaultActionInvocation.java:348)    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:253)    com.sinotrans.common.webapp.ActionInterceptor.intercept(ActionInterceptor.java:38)    com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224)    com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223)

?

最近在使用struts2的时候,将result type配置为chain来实现action间的调用。在新搭建的SSH中,可以正常运行。在与公司的系统集成时,总报出如上错误。

?????? 重写过ActionChainResult,StrutsActionProxyFactory未找出原因。最后发现,原来默认struts2的result的初始化是使用自动类型注入来运行构造函数的。因为ActionChainResult是有带参数的构造函数(如下)。在公司的系统中,刚好注册了一个sql的bean,类似又为java.lang.String。二者一拍即合。每每Result中的namespace,actionName,methodName都变成同样的“XXXXX”(配置sql处写为XXXX)。

????? 两种解决方法:

?????????? 一,在我们的spring配置文件中,再加一个java.lang.String的bean,作冗余。有多个同样类型的bean存在,就不会自动注入到result中。

?????????? 二,继承原来的ActionChainResult,并去掉带有String类型参数的构造函数。并在struts.xml注册

?? ActionChainResult.java

?

    public ActionChainResult(String namespace, String actionName, String methodName) {        this.namespace = namespace;        this.actionName = actionName;        this.methodName = methodName;    }    public ActionChainResult(String namespace, String actionName, String methodName, String skipActions) {        this.namespace = namespace;        this.actionName = actionName;        this.methodName = methodName;        this.skipActions = skipActions;    }

?

?

?? struts.xml

<package name="common" extends="struts-default"><result-types><result-type name="chain" namespace="/" extends="common">

?

热点排行