<" />

关于(警告: No configuration found for the sp

系统 1874 0

Html代码

    <s:form action="/admin/login" method="post"> 
    <s:textfield name="username" id="usenrame" label="用户名" /> 
    <s:password name="password" id="password" label="密码" />  
    <s:submit type="input" value="登录" id="btnsubmit" cssClass="btnsubmit"></s:submit>  
    </s:form>  

struts.xml中的配置代码如下 (代码2):
Xml代码

    <package name="admin" namespace="/admin" extends="struts-default"> 
    <action name="login" class="com.longweir.struts2.action.LoginAction">  
       <result name="success">/actionResult.jsp</result>  
       <result name="login" type="resdirect">/admin/login.jsp</result>      
       <result name="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后缀或者其他的前置路路径,所以修改后的客户端文件配置为代码:

Html代码

    <s:form action="login" method="post" namespace="/admin">  
    <s:textfield name="username" id="usenrame" label="用户名" />  
    <s:password name="password" id="password" label="密码" /> <s:submit type="input" value="登录" id="btnsubmit"  
    cssClass="btnsubmit"> 
    </s:submit>  
    </s:form> 


当然,如果你不是使用的struts2的标签,而是使用的传统的html代码,则表单的action属性必须加上完整的路径和后缀

也就是说,必须改成如下代码:

<form name="form" method="post" action="/admin/login.action">

你如上指定后,当浏览器给出如上的请求/admin/login.action ,struts2框架将首先在sturts.xml中查找 /admin 名称空间,如果找到了(比如我这里显然有这个名称空间),则执行login.action,如果没有找到,会到默认的名称空间中查找,如果默认的也没有,则提示错误,没有映射该action.

分析下我出现的错误,在我的原始的代码 (代码1)中因为没有指定namespace,那么框架认为输出表单的请求和提交表单的请求都是在一个名称空间中,即使在/admin名称空间中,此事虽然可以找到,可以运行,但是会提示这个警告.

如果在你的struts.xml文件中指定了名称空间,那么,如果在客户端使用struts2的标签,则要同样指定名称空间,但action= 这后面,直接写action名即可,不需要加上名称空间的前缀在前面。

因为,struts2框架会根据你所指定的名称空间以及你系统当前应用所映射的路径,构造一个完整的请求路径。比如如上正确的 代码3的 struts2代码,在浏览器中查看源码,解析的结果是:

Html代码

    <form id="login" name="/admin" action="/guestbook/admin/login.action" method="post">  
    <table class="wwFormTable"> 
    <tr>  
        <td class="tdLabel"> 
        <label for="usenrame" class="label">用户名:</label> </td>  
        <td><input type="text" name="username" value="" id="usenrame"/></td>  
       </tr> 
       <tr> 
        <td class="tdLabel"><label for="password" class="label">密码:</label></td>  
       <td><input type="password" name="password" id="password"/></td> 
    </tr>  
      <tr> <td colspan="2"><div align="right"><input type="submit" id="btnsubmit" value="&#30331;&#24405;" class="btnsubmit"/> </div></td>  
       </tr>  
    </table> 
    </form>   

可以看到,输出的action 请求地址非常正确,自动加入了当前应用的名称和根据namespace所整理成的完整的请求路径:"/guestbook/admin/login.action

但是,假如我们人为的在action后面加上 action="/admin/login" ,虽然你指定了namespace="/admin" ,那struts2框架不会给你加上.action的后缀(可以查看输出的html源码中是没有.action这个后缀的),最后还是会出现标题中所提示的警告,虽然还是可以正常工作.

所以,我个人总结为如下:

1. 如果你的xml配置文件中设置了namespace ,建议你的终端的struts2表单标签中也设置一样的namespace

2. 如果已经按照1中的设置,那么 action = 后面直接写action名字即可,不需要加后缀(默认就会加上,xml中也一样)

3. 以上仅是针对使用struts2标签的情况下,如果你没用struts2 的标签而是使用的原始HTML标签,则action=后面必须是完整的路径地址: /应用名/名称空间/xxx.action (action 后缀要有),因为很显然,struts2不会给你自动加上那些信息。

关于(警告: No configuration found for the specified action)解决方案


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论