Возникла исключительная ситуация во время обработки запроса: для пространства имен [/] и имени действия [enter-goal], связанных с контекстным путем, не сопоставлено действие.
Я пытаюсь создать ссылку с одной страницы на другую. Моя главная страница: enter-protein.jsp, и я хочу создать на этой странице ссылку, которая будет перенаправлять на другую страницу, когда кто-нибудь щелкнет ссылку. Я уже создал ссылку, но она не перенаправляется на эту страницу должным образом, и появляется ошибка. Я получаю следующую ошибку при создании приложения:
Sep 01, 2013 7:21:00 PM com.opensymphony.xwork2.util.logging.jdk.JdkLogger error
SEVERE: Exception occurred during processing request: There is no Action mapped for namespace [/] and action name [enter-goal] associated with context path [/ExampleTracker].
There is no Action mapped for namespace [/] and action name [enter-goal] associated with context path [/ExampleTracker]. - [unknown location]
at com.opensymphony.xwork2.DefaultActionProxy.prepare(DefaultActionProxy.java:185)
at org.apache.struts2.impl.StrutsActionProxy.prepare(StrutsActionProxy.java:63)
at org.apache.struts2.impl.StrutsActionProxyFactory.createActionProxy(StrutsActionProxyFactory.java:39)
at com.opensymphony.xwork2.DefaultActionProxyFactory.createActionProxy(DefaultActionProxyFactory.java:58)
at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:553)
at org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77)
at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:99)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1023)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Мои коды следующие:
enter-protein.java
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<a href="<s:url action="enter-goal" />"> Edit Goal</a>
</body>
</html>
Файл enter-goal.jsp:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Goal format page</title>
</head>
<body>
<s:form>
<h1>Goal amount:</h1>
<s:textfield name="goal"/>
<s:submit value="Save" />
</s:form>
</body>
</html>
Можете ли вы помочь мне, где я должен изменить, чтобы ошибка исчезла.
1 ответ
Проблема в теге s:url.
<a href="<s:url action="enter-goal" />"> Edit Goal</a>
Серверный тег указывает Struts возвращать URL-адрес для действия (контроллера в терминологии MVC) с именем "enter-goal". Действия определяются в файле конфигурации Struts (или, может быть, аннотации, не уверены?).
Чтобы связать с JSP, просто укажите на JSP напрямую. Нет необходимости в теге на стороне сервера:
<a href="enter-goal.jsp"> Edit Goal</a>