我是 Struts 2 的新手,但到目前为止,我在使用 API 方面取得了不错的进展。
但是,我陷入了一些我需要摆脱的困境。我正在使用带有 Spring 集成的 Struts 2。我正在用注释编写
Action
类,就像你们中的许多人一样,我喜欢注释。
我的要求是 URL 具有以下性质:
http://<DOMAIN>/program/program1.jspx
http://<DOMAIN>/program/program2.jspx
http://<DOMAIN>/program/program3.jspx
正如您所看到的,URL 中有一定的模式,其中
program1
、program2
和 program3
不断变化,其余的都是静态的。我使用 Spring MVC 非常轻松地处理了类似的情况(我无法选择在当前项目中使用 Spring MVC),就像我的其他项目中的 "/program/{program_name}.jspx"
一样。
但是当我在 Struts 2 中使用相同的方法时,我收到了错误。
我的
Action
课程如下:
@Result(name="program", location="program", type="tiles")
public class ProgramAction extends ActionSupport {
@Action("program/{programName}")
public String getProgramPage() {
// few more lines of code
return "program";
}
}
错误是:
2013-02-28 15:46:35.591 WARN [http-bio-8080-exec-3] CommonsLogger.java:60
Could not find action or result
com.opensymphony.xwork2.config.ConfigurationException: There is no Action mapped for namespace / and action name program1.
at com.opensymphony.xwork2.DefaultActionProxy.prepare(DefaultActionProxy.java:189) ~[xwork-core-2.2.1.jar:2.2.1]
at org.apache.struts2.impl.StrutsActionProxy.prepare(StrutsActionProxy.java:61) ~[struts2-core-2.2.1.jar:2.2.1]
at org.apache.struts2.impl.StrutsActionProxyFactory.createActionProxy(StrutsActionProxyFactory.java:39) ~[struts2-core-2.2.1.jar:2.2.1]
at com.opensymphony.xwork2.DefaultActionProxyFactory.createActionProxy(DefaultActionProxyFactory.java:58) ~[xwork-core-2.2.1.jar:2.2.1]
at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:475) ~[struts2-core-2.2.1.jar:2.2.1]
....
....
我的
struts.xml
文件如下:
<struts>
<constant name="struts.convention.default.parent.package" value="default"/>
<constant name="struts.action.extension" value="jspx" />
<constant name="struts.mapper.alwaysSelectFullNamespace" value="false" />
<constant name="struts.enable.DynamicMethodInvocation" value="true" />
<package name="default" extends="struts-default, json-default, rest-default" namespace="/">
<result-types>
<result-type name="tiles" class="org.apache.struts2.views.tiles.TilesResult"/>
<result-type name="json" class="org.apache.struts2.json.JSONResult"/>
</result-types>
</package>
</struts>
您的操作名称中有斜线。默认情况下,struts 不喜欢这样来纠正添加:
<constant name="struts.enable.SlashesInActionNames" value="true"/>
这是因为您在方法上定义了操作注释。在 JSP 中尝试
<s:a namespace="/" action="program/program1" method="programPage" />
。