1

我試圖開發一個Struts2應用程序,在單擊超鏈接時使用Struts動作映射將用戶引導到hello.jsp時調用動作。我收到以下錯誤:Struts 2 - HTTP狀態404 - 沒有爲行動定義的結果

HTTP Status 404 - No result defined for action com.manaar.action.HelloAction and result success 

我的文件如下。我的映射看起來像它的順序。我也在這裏檢查了其他帖子,但似乎無法找到導致此問題的原因或解決方案。真的很感激任何建議。非常感謝,J

index.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java"%> 
<%@ taglib uri="/struts-tags" prefix="s"%> 
<html> 
<head> 
    <title><s:text name="app.title" /></title> 
    <link rel="stylesheet" href="mystyle.css" type="text/css" /> 
</head> 
<body> 
<center> 
    <h2> 
     Struts 2 Actions 
    </h2> 
    <br> 
    <br> 
    Welcome 
    <s:property value="#session.user" default="Guest" />! 
    <s:if test="#session.user!=null"> 
     <s:url id="logout" action="logout" /> 
     | <s:a href="%{logout}">Logout</s:a> | 
    </s:if> 
    <br> 
    <table cellspacing="5" width="180"> 
     <tr bgcolor="#f0edd9" height="25" align="center"> 
      <td> 
       <s:url id="hello" action="hello"/> 
       <s:a href="%{hello}">Hello Action</s:a> 
       </td> 
      </tr> 
      <tr bgcolor="#f0edd9" height="25" align="center"> 
       <td> 
       <s:a href="add_user.jsp">Add User</s:a> 
       </td> 
      </tr> 
      <tr bgcolor="#f0edd9" height="25" align="center"> 
       <td> 
       <s:a href="user.jsp">View Users</s:a> 
       </td> 
      </tr> 
      <tr bgcolor="#f0edd9" height="25" align="center"> 
       <td> 
       <s:a href="login.jsp">Login</s:a> 
      </td> 
     </tr> 
    </table> 
</center> 
</body> 
</html> 

struts.xml

<!DOCTYPE struts PUBLIC 
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" 
"http://struts.apache.org/dtds/struts-2.0.dtd"> 

<struts> 
<!-- Configuration for the default package. --> 
<package name="default" extends="struts-default"> 
    <action name="hello" class="com.manaar.action.HelloAction" method="wateva"> 
     <result name="success">/hello.jsp</result> 
    </action> 
</package> 

HelloAction.java

/* 
* To change this template, choose Tools | Templates 
* and open the template in the editor. 
*/ 
package com.manaar.action; 
import com.opensymphony.xwork2.Action; 
import static com.opensymphony.xwork2.Action.SUCCESS; 

public class HelloAction implements Action { 

String message; 

public String getMessage() { 
    return message; 
} 

public void setMessage(String message) { 
    this.message = message; 
} 

    /** 
* 
* @return 
* @throws Exception 
*/ 
@Override 
public String execute() throws Exception { 
    setMessage("Hello From Struts!"); 
    return SUCCESS; 
} 
} 
+1

嘗試在HelloAction中創建一個方法wateva,並從該方法返回SUCCESS,或者您可以在struts.xml中調用execute方法而不是whateva –

+0

我嘗試徹底刪除方法wateva,並且得到相同的錯誤。然後我嘗試從struts.xml調用execute。同樣的錯誤 –

回答

2

您可以使用config-browser plugin。如果您想要在瀏覽器中查看配置以及如何將操作映射到URL,這會很有用。

其實,您使用convention-plugin的問題的原因。如果您將struts2-convention-plugin-2.3.x.jar置入WEB-INF/lib,則會使用它。安裝後,它將掃描struts-plugin.xml中定義的軟件包,並按照約定創建一個附加到struts.xml的配置。除了您的操作符合插件使用的規則,操作"hello"爲類HelloAction創建,但不幸的是它沒有結果"success"。要將此結果添加到該操作中,應在該類上使用@Result註釋,或使用@ResultPath註釋來指定可找到的結果的路徑,而不是默認的WEB-INF/content。如果您應用struts.convention.result.path配置設置,也可以做同樣的事情。

@Result(name = SUCCESS, location = "/hello.jsp") 

另外請注意,您在struts.xml的行動"hello"定義的映射少的意思,除非它映射到指定的方法。 JSP的名字假設爲index.jsp

+0

非常感謝。我正在閱讀進一步的配置瀏覽器和如何使用。我也刪除了錯字方法(wateva),但我仍然得到相同的錯誤。如果我想在我的課程中註釋@Result,我應該在哪裏添加註釋?還有我的班級需要什麼樣的進口聲明。謝謝! –

+0

您可以將它放在類或用於映射操作的方法上,也可以放在屬性'results'的'@ Action'註釋中,也可以放在'@ Results'註釋體中。註釋位於org.apache.struts2.convention包中。註釋「,它與常規插件一起提供。 –

+0

也考慮進一步閱讀第二個鏈接,有大量示例說明如何使用註釋配置動作映射。 –

0

我想你錯過了在HelloAction中編寫方法「wateva」。因此,要麼將其寫入執行位置,要麼將其從struts映射中移除。

<struts> 
<!-- Configuration for the default package. --> 
<package name="default" extends="struts-default"> 
    <action name="hello" class="com.manaar.action.HelloAction"> 
     <result name="success">/hello.jsp</result> 
    </action> 
</package> 
+0

我從struts映射中刪除了wateva,但是這並沒有解決問題 –