Struts 2 - HTTP Status 404 - для действия не определен результат
Я пытаюсь разработать приложение Struts2, в котором действие вызывается при нажатии на гиперссылку, которая направляет пользователя в hello.jsp с использованием сопоставления действий Struts. Я получаю следующую ошибку:
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;
}
}
2 ответа
Вы можете использовать плагин config-browser. Это полезно, если вы хотите увидеть конфигурацию в браузере и то, как действия сопоставляются с URL-адресами.
Собственно, причина проблемы в том, что вы используете соглашение-плагин. Он используется, если вы положите 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
,
Я думаю, что вы пропустили, чтобы написать метод "wateva" в HelloAction. Так что или напишите это вместо выполнения или удалите это из своего отображения распорок.
<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>