jsp - Struts2 No hay ninguna acción asignada para el espacio de nombres
configuration namespaces (3)
Problemas relacionados con: No hay ninguna acción asignada para el espacio de nombres y el nombre de acción asociado con la ruta de contexto
Si usa url para llamar a una acción, asegúrese de que esta url esté asignada a la configuración de struts.
Para solucionar el problema con el mapeo de url puede usar el complemento config-browser.
Simplemente agregue este complemento a las dependencias de su proyecto y cuando se implemente, puede acceder a un sitio web que le muestra una configuración de tiempo de ejecución con URL disponibles para llamar a la acción.
Por ejemplo, si está ejecutando Tomcat localmente en el puerto 8080 y desplegó su aplicación en el
context
, puede acceder a la URL del complemento con
http://localhost:8080/[context]/config-browser/index.action
Puede hacer clic en cualquier acción disponible en la página de acciones debajo del espacio de nombres en la barra lateral.
También tenga en cuenta que si su acción no se encuentra en el paquete, podría estar en el paquete
default
.
Struts realiza una búsqueda adicional en el espacio de nombres
default
para la acción que no está en el espacio de nombres asignado desde la URL.
Consulte el complemento del config-browser de configuración para depurar problemas de configuración.
Para asignar correctamente la URL a la acción se requieren dos parámetros: el nombre de la acción y el espacio de nombres.
Struts carga la configuración xml en el inicio y debe conocer la ubicación de
struts.xml
. Por defecto, está buscando en classpath para encontrar un archivo con nombre conocido comostruts.xml
. Luego analiza el documento y crea una configuración de tiempo de ejecución. Esta configuración se utiliza para encontrar el elemento de configuración apropiado para la url de acción. Si no se encuentra dicho elemento durante la solicitud, se devuelve el código de error 404 con el mensaje:There is no Action mapped for namespace and action name
.Además, este mensaje contiene un espacio de nombres y nombres de acción utilizados para encontrar la configuración de acción. Luego puede verificar su configuración en
struts.xml
. A veces, el nombre de acción y el espacio de nombres, almacenados enActionMapping
apuntan a la acción incorrecta. Estos valores están determinados por elActionMapper
que podría tener una implementación diferente, utilizada por los complementos.También hay otra configuración que podría afectar a este mapeador y mapeo, pero el punto es el mismo si recibe este mensaje, entonces la URL utilizada no mapeó ninguna configuración de acción en la configuración de tiempo de ejecución. Si no puede darse cuenta de qué URL debe usar, puede probar el complemento config-browser para ver la lista de URL disponibles para usar.
Soy un principiante de Struts2, sé que esta pregunta se hizo aquí muchas veces, pero traté de resolverlo y leí muchos hilos aquí, pasé 6 horas y todavía no puedo hacer que funcione. Realmente necesito más sugerencias ...
Aquí está mi paquete
Struts2Test
+Struts2Test/src
+tw.com.rrstudio.java.test
-TestAction.java
+Struts2Test/build
+Struts2Test/WebContent
+Struts2Test/WebContent/META-INF
+Struts2Test/WebContent/WEB-INF/classes
+Struts2Test/WebContent/WEB-INF/lib
-Struts2Test/WebContent/WEB-INF/spring-context.xml
-Struts2Test/WebContent/WEB-INF/spring-mvc.xml
-Struts2Test/WebContent/WEB-INF/struts.xml
-Struts2Test/WebContent/WEB-INF/struts2-action.xml
-Struts2Test/WebContent/WEB-INF/web.xml
-Struts2Test/WebContent/error.jsp
-Struts2Test/WebContent/index.jsp
-Struts2Test/WebContent/TestAction.jsp
Mi web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">
<display-name>Struts2Test</display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/spring-context.xml
/WEB-INF/spring-mvc.xml
</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
<init-param>
<param-name>actionPackages</param-name>
<param-value>tw.com.rrstudio.java.test</param-value>
</init-param>
</filter>
<jsp-config>
<taglib>
<taglib-uri>HTTP://java.sun.com/jsp/jstl/core</taglib-uri>
<taglib-location>/WEB-INF/lib/tld/c.tld</taglib-location>
</taglib>
<jsp-property-group>
<url-pattern>*.jsp</url-pattern>
<page-encoding>UTF-8</page-encoding>
</jsp-property-group>
</jsp-config>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring-mvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
<session-config>
<session-timeout>10</session-timeout>
</session-config>
</web-app>
Y también, struts.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<!-- struts 2.3.16.3 has problem of security,needing to set DynamicMethodInvocation=false -->
<constant name="struts.enable.DynamicMethodInvocation" value="false" />
<constant name="struts.devMode" value="false" />
<constant name="struts.objectFactory" value="spring" />
<constant name="struts.action.extension" value="do"/>
<constant name="struts.action.excludePattern" value="/jsp/.*?,/image/.*?,/css/.*?,/js/.*?,.*//.jsp"/>
<package name="default" extends="json-default" ></package>
<package name="Strut2Test" extends="json-default" >
<global-results>
<result name="SystemErrorPage">/WebContent/error.jsp</result>
</global-results>
<action name="login" class="tw.com.rrstudio.java.test.TestAction">
<result name="index">/WebContent/index.jsp</result>
<result name="success">/WebContent/TestAction.jsp</result>
</action>
</package>
</struts>
index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<%@ 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=UTF-8">
<META HTTP-EQUIV="Refresh" CONTENT="0;URL=login.action">
<title>Index of Struts2Test</title>
</head>
<body>
<h1>Index of Struts2Test</h1>
<form action="testAction" method="post">
<label for="name">Please enter your name</label><br/>
<input type="text" name="name"/>
<input type="submit" value="Say Hello"/>
</form>
</body>
</html>
El servidor es Tomcat 8.0.38, comienza sin error. Pero cuando accedo
me da este error (como título), y si accedo
Obtendré un resultado 404 normal.
Ahora no tengo idea, cualquier sugerencia o sugerencia es bienvenida ...
Consulte el config-browser de configuración para depurar problemas de configuración.
En nuestra configuración usamos el enlace:
http://localhost:8080/[context]/config-browser/index.do
En nuestro caso, descubrimos que teníamos archivos
struts.xml
en conflicto en dos niveles de carpeta diferentes.
Por conflictivo quiero decir que las acciones dentro de ellos se superponen usando el mismo nombre.
Verifique struts.xml para constantes struts.action.excludePattern y esa entrada para iniciar sesión está presente en eso o no. En mi caso fue excluir pattren que estaba creando un problema. Esto es aplicable si está dando una llamada de servlet en la aplicación basada en struts2