背景:在struts2中,当一个Action对应多个方法时,为了不给每一个方法增加action的配置,可以采用动态调用方法。这里实践了动态调用方法中的一种,即在URL中使用method参数调用方法。在这过程中,出现一个错误,解决方法很简单,但却绕了好大的弯~~~所以写文,以帮助遇到同样问题的亲们。
源码:
1.action文件:
package com.web.www.action;
public class SimpleAction {
private String username;
private String password;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String addInput(){
System.out.println("进入添加界面");
return "add_input";
}
public String add(){
System.out.println("执行添加方法");
System.out.println("UserName" + username);
System.out.println("PassWord" + password);
return "add_success";
}
}
2.jsp页面:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!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">
<title>Insert title here</title>
</head>
<body>
添加界面
<form action="/web/test/simple.action" method="post">
UserName:<input name="username"/><br/>
PassWord:<input name="password" type="password"/><br/>
<input type="submit" name="提交"/>
</form>
</body>
</html>
3.配置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>
<constant name="struts.devMode" value="true" />
<package name="basicstruts2" namespace="/test" extends="struts-default">
<action name="simple" class="com.web.www.action.SimpleAction">
<result name="add_input">/add_input.jsp</result>
<result name="add_success">/add_success.jsp</result>
</action>
</package>
</struts>
步骤:1.部署完程序
2.在浏览器中输入:http://localhost:8080/web/test/simple
此时,出错了。。。这个报错的是意思是,找不到execute()方法
3.利用method关键字,可以在URL中动态调用方法。修改浏览器中的输入为:http://localhost:8080/web/test/simple?method:addInput
此时,还是报错。。。。寻遍度娘,几乎崩溃,结果,解决方法很简单。。。
解决方案:在struts.xml文件中增加如下配置:<constant name="struts.enable.DynamicMethodInvocation" value="true" />,然后再次重复上面的步骤3,就OK啦~~~