Struts 2 - HTTP状态404 - 没有为操作定义结果 [英] Struts 2 - HTTP Status 404 - No result defined for action
问题描述
我正在尝试开发Struts2应用程序,其中在单击使用Struts动作映射将用户指向hello.jsp的超链接时调用操作。我收到以下错误:
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
我的文件如下。我的映射看起来像是按顺序。我还在这里检查了其他帖子,但似乎无法找到这个问题的原因或解决方案。非常感谢任何建议。非常感谢,J
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
:
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
:
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
:
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;
}
}
推荐答案
你可以使用配置浏览器插件。如果您想在浏览器中查看配置以及操作如何映射到URL,这将非常有用。
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.
实际上,您使用 convention-plugin 。如果将 struts2-convention-plugin-2.3.x.jar
放入 WEB-INF / lib
,则使用它。安装后,它会扫描在 struts-plugin.xml
中定义的包,并创建一个额外的 struts.xml
配置按惯例。除了您的操作符合插件使用的规则外,还为类 HelloAction
创建了操作hello
但不幸的是它没有结果成功
。要将此结果添加到操作中,您应该在类上使用 @Result
注释,或使用 @ResultPath
注释指定结果的路径,而不是默认值 WEB-INF / content
。如果你应用 struts.convention.result.path
配置设置,也可以这样做。
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")
另请注意,您在 struts.xml
中为操作hello
定义的映射含义较少,除非它映射到指定的方法。并且JSP的名称应该是 index.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
.
这篇关于Struts 2 - HTTP状态404 - 没有为操作定义结果的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!