1

我正在尝试开发一个 Struts2 应用程序,其中在单击超链接时调用一个动作,该超链接使用 Struts 动作映射将用户引导到 hello.jsp。我收到以下错误:

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;
}
}
4

2 回答 2

2

您可以使用config-browser 插件。如果您想查看浏览器中的配置以及操作如何映射到 URL,这将非常有用。

实际上,您使用约定插件问题的原因。如果您struts2-convention-plugin-2.3.x.jar放入WEB-INF/lib. 安装后,它会扫描定义在 中的包,struts-plugin.xml并按约定创建附加struts.xml配置。除了您的操作符合插件使用的规则外,该操作"hello"是为该类创建的,HelloAction但不幸的是它没有结果"success"。要将此结果添加到操作中,您应该@Result在类上使用注释,或者使用@ResultPath注释来指定结果的路径,而不是 default WEB-INF/contentstruts.convention.result.path如果您应用配置设置,也可以这样做。

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

struts.xml另请注意,您在for 操作中定义的映射"hello"意义不大,除非它映射到指定的方法。并且 JSP 的名称应该是index.jsp.

于 2013-07-20T09:06:34.733 回答
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>
于 2013-07-20T05:35:33.043 回答