我正在尝试开发一个Struts2应用程序,该应用程序在单击超链接时会调用一个动作,该超链接使用Struts动作映射将用户定向到hello.jsp。我收到以下错误:
HTTP Status 404 - No result defined for action com.manaar.action.HelloAction and result success
我的文件如下。我的映射看起来很井井有条。我还检查了此处的其他帖子,但似乎找不到导致此问题的原因或解决方案。非常感谢任何建议。非常感谢,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; } }
您可以使用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/content。如果应用struts.convention.result.path配置设置,则可以执行相同的操作。
struts2-convention-plugin-2.3.x.jar
WEB- INF/lib
struts- plugin.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。