(action动态方法调用)struts通过ActionName!methodName.action,即通过感叹号(即!)访问某Action的方法,确老是报错

来源:互联网 发布:网络二次元是什么意思 编辑:程序博客网 时间:2024/05/14 10:14

(struts通过ActionName!methodName.action,即通过感叹号(即!)访问某Action的方法,如下所示:

http url链接如下:

http://127.0.0.1:8080/News/newsAction!findAll.action

上面链接中News是工程名,newsAction是类名,findAll是newsAction类中的方法。

NewsAction.java如下

public class NewsAction extends BaseAction implements ModelDriven<News>{
private NewsService newsService = null;
private News model = new News();
public String findAll() throws IOException{
List<News> news = newsService.findAll();
JSONArray array = JSONArray.fromObject(news);
this.getResponse().setContentType("text/html; charset=utf-8");
this.getResponse().setHeader("Cache-Control", "no-cache");
this.getResponse().getWriter().print(array);
return null;
}

}

struts.xml配置如下:

<package name="default" extends="struts-default">
<action name="newsAction" class="newsAction">

</action>
</package>

spring.xml配置如下:

<bean id="newsAction" class="com.hhl.news.action.NewsAction">
<property name="newsService" ref="newsService"/>
</bean>

却老是报错,访问不上,报错如下:

There is no Action mapped for namespace [/] and action name [newsAction!findAll] associated with context path [/News].


namespace啥的也没有配错,什么都没错。为什么?????

答案是:将Struts-core.jar包中的default.properties文件中,struts.enable.DynamicMethodInvocation属性设置为true!!Struts-core.jar包中该属性默认竟然是false的!

详细解释:使用动态方法调用必须设置Struts2允许动态方法调用。开启系统的动态方法调用是通过设置struts.enable.DynamicMethodInvocation常量完成的,设置该常量的值为true,将开启动态方法调用;否则将关闭关闭动态方法调用!!

但那个default.properties是不能被更改的,有如下解决方法:

方法1:。如需要更改里面的配置信息,可以在src根目录下建一个 struts.properties的配置文件,然后重写加载所要更改的配置信息。http://blog.csdn.net/wfcaven/article/details/5937557

方法2:

在struts.xml里加入    <constant name="struts.enable.DynamicMethodInvocation" value="true" /> 





0 0
原创粉丝点击