学习struts2 中时候控制台老是出现该警告错误。
客户端代码如下 (代码1):
<s:formaction="/admin/login"method="post">
<s:textfieldname="username"id="usenrame"label=
"用户名"/>
<s:passwordname="password"id="password"label=
"密码"/>
<s:submittype="input"value=
"登录"id
="btnsubmit"cssClass="btnsubmit"></s:submit>
</s:form>
struts.xml中的配置代码如下 (代码2):
<packagename="admin"namespace="/admin"extends="struts-default">
<actionname="login"class="com.longweir.struts2.action.LoginAction">
<resultname="success">/actionResult.jsp</result>
<resultname="login"type="redirect">/admin/login.jsp</result>
<resultname="input">/admin/login.jsp</result>
</action>
</package>
搜索网络给出的答案几乎都说把<s:form action="/admin/login method="post" >中的login后加上.action后缀了,做了测试,问题仍然没有解决。
通过观察发现有两个地方需要修改,首先<s: form>表单中需要加入命名空间参数namespace,和struts.xml中配置一致。其次,<s:form action=xxx> 中直接写action映射的名字,比如我的xml中是login,则这里直接写login即可,
不需要画蛇添足加上.action后缀或者其他的前置路路径,所以修改后的客户端文件配置为 代码(3):
<s:formaction="login"method="post"namespace="/admin">
<s:textfieldname="username"id="usenrame"label=
"用户名"/>
<s:passwordname="password"id="password"label=
"密码"/>
<s:submittype="input"value=
"登录"id
="btnsubmit"cssClass="btnsubmit"></s:submit>
</s:form>
当然,如果你不是使用的struts2的标签,而是使用的传统的html代码,则表单的action属性必须加上完整的路径和后缀也就是说,必须改成如下代码:
<formname="form"method="post"action="/admin/login.action">
你如上指定后,当浏览器给出如上的请求/admin/login.action ,struts2框架将首先在sturts.xml中查找 /admin 名称空间,如果找到了(比如我这里显然有这个名称空间),则执行login.action,如果没有找到,会到默认的名称空间中查找,如果默认的也没有,则提示错误,没有映射该action.
--转自
该贴由koei123转至本版2015-7-14 11:05:44