Struts2 没有为action com.ccarc.Contact和result success定义结果

Struts2 没有为action com.ccarc.Contact和result success定义结果,struts2,struts2-namespace,Struts2,Struts2 Namespace,我一定是遗漏了什么。我有以下struts.xml文件 <?xml version="1.0" encoding="UTF-8"?> <struts> <package name="myName" namespace="/myName" extends="struts-default"> <action name="contact" class="com.ccarc.Contact"> &l

我一定是遗漏了什么。我有以下struts.xml文件

<?xml version="1.0" encoding="UTF-8"?>
    <struts>
       <package name="myName" namespace="/myName" extends="struts-default">
        <action name="contact" class="com.ccarc.Contact">
           <result>/jsp/Contact.jsp</result>
           <result name="success">/jsp/Contact.jsp</result>
        </action>
   </package>
</struts>
我环顾四周,没有找到答案,大多数人都是被结果中忘记名字的人问到的(但正如你所看到的,我列出了成功的名字)

下面是我的web.xml文件

<?xml version="1.0" encoding="UTF-8"?>`
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
 <display-name>myApp</display-name>

  <filter>
     <filter-name>struts2</filter-name>
     <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
     <init-param>
         <param-name>actionPackages</param-name>
         <param-value>com.ccarc</param-value>
     </init-param>
</filter>

  <filter-mapping>
      <filter-name>struts2</filter-name>
      <url-pattern>/*</url-pattern>
  </filter-mapping>
</web-app>
编辑

将您的URL更改为:

http://localhost:8080/FieldDayLogger/myName/contact.action
或者,如果您想使用相同的URL,则在struts.xml中将名称空间更改为“/”


是了解命名空间配置和解释的好链接。:)

其中一个原因是URL
http://localhost:8080/FieldDayLogger/contact.action
在映射文件
中,您已将命名空间定义为
/myName
,而您未在URL中使用

Struts2有一种机制,它通过该机制查找名称空间,如果没有找到任何名称空间,它将转到默认名称空间,在您的情况下,它将无法找到名称空间

命名空间的层次结构与文件系统路径不同。有一个名称空间级别。例如,如果请求URL/barspace/myspace/bar.action,框架将首先查找namespace/barspace/myspace。如果/barspace/myspace中不存在该操作,则搜索将立即返回到默认命名空间“”。框架不会将名称空间解析为一系列“文件夹”。在名称空间示例中,将选择默认名称空间中的bar操作

我强烈建议您查看名称空间的doc,看看它是如何工作的

另一种解决方案是,如果您在from标记或其他此类标记中创建操作,则有一个属性,即
名称空间
添加
/myName

希望这能对你有所帮助。

我想“联系人”是Struts2中的一个关键词。
请将com.ccarc.Contact重命名为com.ccarc.MyContact,然后重试…

最好始终使用名称空间。 如果要访问的文件位于WebContent内,则可以使用namespace=“/”,或者根据文件的目录结构,可以使用“/”以外的任何名称

尝试以下方法

<package name="myName" namespace="/myName" extends="struts-default">
        <action name="contact" class="com.ccarc.Contact">
           <result name="success">jsp/Contact.jsp</result>
        </action>

jsp/Contact.jsp

我在tiles.xml中缺少定义:

<tiles-definitions>

...

  <definition name="foobar" template="/jsp/template.jsp">
    <put-attribute name="viewId" value="foobar"/>
    <put-attribute name="workArea"  value="/jsp/foobar.jsp"/>
  </definition>

...

</tiles-definitions>

...
...

检查文档:

为什么
/jsp/Contact.jsp/jsp/Contact.jsp
已经定义了2次?当您未定义任何结果名称时,默认值始终为successno good reason。我删除了
/jsp/Contact.jsp
,只留下了成功的一个。我之所以选择success one而不是默认的,是因为我想使用success one会更具可读性。您能否显示完整的堆栈错误以及您要访问的URL?我已将堆栈跟踪添加到原始问题中,并且URL是本地主机,因此您将无法访问它,但是下面是将struts中的名称空间更改为“/”的URL。xml为什么将名称空间更改为
/
?在S2中,您可以选择任何名称空间和您需要知道的所有内容来映射该名称空间以及它们的工作方式apperciated@HashimR:我同意,请从您的答案中删除第一行,名称空间并不意味着总是使用“/”只是跟进我回到了名称空间,即myName和您建议的URL,它起了作用。只是为了让其他人看到你的第二个建议也有效。@Umeshawashi:第一行实际上是一条评论。:)
<package name="myName" namespace="/myName" extends="struts-default">
        <action name="contact" class="com.ccarc.Contact">
           <result name="success">jsp/Contact.jsp</result>
        </action>
<tiles-definitions>

...

  <definition name="foobar" template="/jsp/template.jsp">
    <put-attribute name="viewId" value="foobar"/>
    <put-attribute name="workArea"  value="/jsp/foobar.jsp"/>
  </definition>

...

</tiles-definitions>