Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
822 views
in Technique[技术] by (71.8m points)

java - Struts 2 - HTTP Status 404 - No result defined for action

I'm trying to develop a Struts2 app where an action is invoked upon clicking a hyperlink which directs the user to a hello.jsp using Struts action mapping. I'm getting the following error:

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

My files are as follows. My mapping looks like it's in order. I also checked other postings on here but can't seem to find the cause or solution to this problem. Would really appreciate any advice. Many thanks, 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;
}
}
See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

You could use a config-browser plugin. It's useful if you want to see the configuration in the browser and how actions are mapped to the URLs.

Actually, the cause of the problem that you use a convention-plugin. It's used if you put struts2-convention-plugin-2.3.x.jar into WEB-INF/lib. When installed it scans the packages, defined in the struts-plugin.xml and creates an additional to struts.xml configuration by conventions. As well as your action is comply the rules used by the plugin the action "hello" is created for the class HelloAction but unfortunately it has no a result "success". To add this result to the action you should use @Result annotation on the class, or use @ResultPath annotation to specify the path to results where they could be located instead of default WEB-INF/content. The same could be done if you apply struts.convention.result.path configuration settings.

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

Also note, that the mapping you defined in the struts.xml for the action "hello" has less meaning unless it mapped to the method specified. And name of the JSP supposed a typo for index.jsp.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...