请struts2高手进一下。整了2天了,注解加载出现有时加载有时没有加载的问题

gjlping 2011-02-18 10:47:15
现在项目使用struts2的注解进行action的加载。比如TemplateAction类
@ParentPackage("default")//default继承自struts-default
@Action(name = "template")
@Results( { @Result(name = "doQuery", type = NullResult.class, value = "/jsp/depms/temp/temp_list.jsp", params = {}),
@Result(name = "doQueryCorp", type = NullResult.class, value = "/jsp/depms/temp/temp_list_corp.jsp", params = {}),
@Result(name = "doAdd", type = NullResult.class, value = "/jsp/depms/temp/temp_add.jsp", params = {}),
@Result(name = "doAddCorp", type = NullResult.class, value = "/jsp/depms/temp/temp_add_corp.jsp", params = {}),
@Result(name = "preEdit", type = NullResult.class, value = "/jsp/depms/temp/temp_edit.jsp", params = {}),
@Result(name = "doEditBase", type = NullResult.class, value = "/jsp/depms/temp/temp_edit_base.jsp", params = {}),
@Result(name = "doView", type = NullResult.class, value = "/jsp/depms/temp/temp_view.jsp", params = {}) })
在控制输出了
class:class com.kehaoinfo.khsafe.depms.template.action.TemplateAction parent:null current:com.kehaoinfo.khsafe.depms.template.action

如果struts加载成功的情况下在调试模式下查看Dispatcher.configurationManager.configuration.runtimeConfiguration(此类是一个接口)查看内容如下
/dailyCheck //这个为其他action加载的
/templateChapter //这个为其他action加载的
/template
/plan //这个为其他action加载的
前台页面访问template!doQuery.action就可以。

struts加载失败 查看内容为
/khsafe/depms/template/action/accImage//这个为其他action加载的
/khsafe/depms/template/action/template
/khsafe/depms/template/action/templateChapter//这个为其他action加载的
前台页面访问进需要加上/khsafe/depms/template/action/template!doQuery.action 才能进行访问。

原先以为这个是命名空间的问题,于是乎给templateAction加上了一个
@NameSpace(value="") //指定使用默认命名空间。
还是有问题,于是我在试了一下添加一个命名空间
@NameSpace(value="/test") //指定命名空间需要加上test
原本以为问题能够解决,由于问题随机的(有时候加载成功)。重启了有N次之后。未加载的情况还是出现了。

请高手帮办给个思路,正在看struts2.1.6的源代码。头疼先来这上边要个思路
...全文
103 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
gjlping 2011-02-22
  • 打赏
  • 举报
回复
原来是命名空间的问题。最后还是没知道struts2是怎么加载的。下边是struts2加载的源代码
org.apache.struts2.config.Action actionAnn =
(org.apache.struts2.config.Action) cls.getAnnotation(org.apache.struts2.config.Action.class);
if (actionAnn != null) { //这里判断是否为空,出现命名空间不正确的原因就是actionAnn为空,但是为什么为空不是很了解。
actionName = actionAnn.name();
if (actionAnn.namespace().equals(org.apache.struts2.config.Action.DEFAULT_NAMESPACE)) {
actionNamespace = "";
} else {
actionNamespace = actionAnn.namespace();
}
} else {
for (String pkg : pkgs) {
if (name.startsWith(pkg)) {
if (LOG.isDebugEnabled()) {
LOG.debug("ClasspathPackageProvider: Processing class "+name);
}
name = name.substring(pkg.length() + 1);

actionNamespace = "";
actionName = name;
int pos = name.lastIndexOf('.');
if (pos > -1) {
actionNamespace = "/" + name.substring(0, pos).replace('.','/');
actionName = name.substring(pos+1);
}
break;
}
}


最后的解决方法在@Action(name = "template")上边添加命名空间为默认
@Namespace(value="")
这样访问就正常了。结贴。
UPC_思念 2011-02-19
  • 打赏
  • 举报
回复
看的有点晕呼,只要功能能实现,何必一定要用注解呢?
pingjiuzhou 2011-02-19
  • 打赏
  • 举报
回复
用都不会用你还看源码,每次修改注解都重启下再看看

67,512

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧