No configuration found for the specified action 原因及解决方案
引自力云:
警告: No configuration found for the specified action: 'login' in namespace: ''. Form action defaulting to 'action' attribute's literal value.
引发原因:底层原因本人不是太清楚,但我理解的是,由于请求页面的namespace属性与struts.xml的namespace属性值不一致引起
的,这种警告基本上不会影响系统的运行,但对于一个追求完善的人来说,不得不说,这并不是一道好的风景。所以,这里,提供一个小小的解决方案供朋友们参
与。
由于引发这个警告的只是用于请求的jsp页面和struts.xml两个文件,为了让朋友们更好的理解,这里我将用于测试的代码复制出来,供大家参与。(请求页面:login.jsp struts2配置文件:struts.xml)
(由于下面的jsp页面关联有其他文件,这里就不复制出来了,单独使用可能会有其他的错误。如果读者需要测试的话,可以自己写一个简单的登录页面)
引发警告的文件:
login.jsp
<%@ page language="java"
import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="s"
uri="/struts-tags"%>
<%
String path = request.getContextPath();
String basePath =
request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC
"-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base
href="<%=basePath%>">
<title><s:property
value="getText('loginPage')"/></title>
<meta http-equiv="pragma"
content="no-cache">
<meta http-equiv="cache-control"
content="no-cache">
<meta http-equiv="expires"
content="0">
<meta http-equiv="keywords"
content="keyword1,keyword2,keyword3">
<meta http-equiv="description"
content="This is my page">
<!--
<link rel="stylesheet"
type="text/css" href="styles.css">
-->
</head>
<body>
<s:form action="login"
method="post">
<s:textfield name="username"
key="user"></s:textfield>
<s:password name="password"
key="pass"></s:password>
<s:submit name="submit"
key="login"></s:submit>
</s:form>
</body>
</html>
struts.xml
<?xml version="1.0"
encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache
Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<!-- Add packages here
-->
<package name="struts0200" namespace="/"
extends="struts-default">
<default-action-ref
name="index" />
<action
name="login"
class="com.struts2_0200.LoginAction">
<result
name="success">
/welcome.jsp
</result>
<result
name="error">
/login.jsp
</result>
</action>
</package>
</struts>
引发警告的的关键之处是:
login.jsp页面中,<s:form action="login" method="post"> ,此处没有指明namespace属性的值,所以系统会自动的认为namespace的值为警告信息中的那样,namespace: ''
而struts.xml文件中,我们指定的namespace的值为:namespace="/",两处的namespace的值为一致,从而导致了警告的产生。
所以,解决方法很简单,将两个页面的namespace的值改成一样的就行了。这里我修改了login.jsp页面,修改内容如下:
<s:form action="login" method="post" namespace="/">
另外补充一点,这种情况一般发生在Tomcat 6.0及其以后的版本,之前版本的不会发出这种警告。如果不是系统功能的需要,建议不要使用最新版本的服务器。