Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Struts2操作正则表达式/URL通配符_Java_Struts2 - Fatal编程技术网

Java Struts2操作正则表达式/URL通配符

Java Struts2操作正则表达式/URL通配符,java,struts2,Java,Struts2,我是Struts2新手,但到目前为止,我在使用API方面取得了不错的进展。然而,我被困在一些我需要摆脱的事情上。我正在使用Struts2与Spring集成。我正在用注释编写我的动作类,就像你们中的许多人一样,我喜欢注释 我的要求是URL应具有以下性质: http://<DOMAIN>/program/program1.jspx http://<DOMAIN>/program/program2.jspx http://<DOMAIN>/program/progr

我是Struts2新手,但到目前为止,我在使用API方面取得了不错的进展。然而,我被困在一些我需要摆脱的事情上。我正在使用Struts2与Spring集成。我正在用注释编写我的动作类,就像你们中的许多人一样,我喜欢注释

我的要求是URL应具有以下性质:

http://<DOMAIN>/program/program1.jspx
http://<DOMAIN>/program/program2.jspx
http://<DOMAIN>/program/program3.jspx
错误是

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
文件如下:

@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";      
  }
}
<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>


这是因为您在方法上定义了操作注释。在JSP中尝试

您的操作名称中有一个斜杠。默认情况下,struts不喜欢这样来更正添加:

<constant name="struts.enable.SlashesInActionNames" value="true"/>


Hi Roman,只有当Action类完成并将请求转发给JSP时,JSP才会出现。所以我不确定我是否遵循了你的指示。我知道,你没有掌握JSP,对吗?将它放入JSP并浏览到它,然后在源代码视图中打开页面并查看呈现的HTML。当然,您可以很容易地找到带有锚定标记的链接。查看href属性,您将看到应该如何调用您的操作。但是当我打电话的时候http:///program/program1!programPage.jspx我仍然得到相同的错误!谢谢你的四元数!!你的回答帮助我解决了这个问题。我真的很感谢你的帮助。对不起,如果我的问题太简单了。没问题,这很容易出错。如果您还没有使用约定插件,请查看该插件。此外,如果这有助于解决问题,那么问题现在已经完全解决。在绿色复选标记中,将答案标记为“已接受”。另外,请对您可能遇到的任何其他已解决问题执行此操作,因此每次您找到答案时,将奖励您2次代表。还不错。