概述
在学习struts框架时经常会使用到通配符调用方法,如下
<action name="*Action" class="usersAction" method="{1}">
<!-- name属性不写默认success -->
<result>/home.jsp</result>
<result name="login">/file.jsp</result>
<result name="input">/login.jsp</result>
<!-- 允许的方法 -->
<allowed-methods>login</allowed-methods>
</action>
其中的action name="*Action"中*这个符号代表的值会传入method=“{1}”中,并对应action类的一个方法名,这样就能很大程度地减少配置文档中action的数目,例如访问:http://localhost:8000/struts_day04/loginAction,loginAction满足条件,login代表的就是*,login就是bean的ID为usersAction的类中的方法名,即调用UsersAction类中的login方法,例如下:
package cn.tedu.web;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;
import cn.tedu.entity.Users;
/**
* 控制器类
* 作用:处理用户的请求
* @author wq
*
*/
@Controller
@Scope("prototype")
public class UsersAction extends BaseAction{
/** 属性 */
private Users user;
public Users getUser() {
return user;
}
public void setUser(Users user) {
this.user = user;
}
/** 登陆验证的方法 */
public String login(){
System.out.println("执行顺序:4进入login()");
if(user != null){
if(user.getName().equals("admin") && user.getPassword().equals("admin")){
return SUCCESS;
}
}
return LOGIN;
}
}
但是在使用这种通配符方法的时候,经常会看到这样的映射错误提示
Struts has detected an unhandled exception:
Message:There is no Action mapped for namespace [/] and action name [user_login] associated with context path [/shop].
这是由于struts版本的原因,对于Struts2.3之前的版本可以不配置<allowed-methods>
,但是对于之后的版本,如果不配置<allowed-methods>
将会出现上述异常
添加如下代码
<allowed-methods>Action内的方法名</allowed-methods>
才成功了
其实有好几种方式都可以添加:
1.在相应的action中添加,只对该action起作用: <allowed-methods>login</allowed-methods>
2.在action前面,package里面添加<global-allowed-methods>regex:.*</global-allowed-methods>,对所有action都起作用,注意顺序,否组会报错,因为在struts.xml中标签的顺序是有顺序规定的,还可以<global-allowed-methods>login</global-allowed-methods>,对某一个方法期作用
最后
以上就是专注小霸王为你收集整理的struts2.5框架使用通配符指定方法(常见错误)-- 分析的全部内容,希望文章能够帮你解决struts2.5框架使用通配符指定方法(常见错误)-- 分析所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复