Struts2调用Action的两种方法以及参数处理
2016-10-02 01:19
351 查看
在Struts2的框架下,Action的配置信息写在struts.xml中,用来处理来自页面的请求。
这是一个简单的表单,其中action属性即可说明该表单所对应的action,在struts.xml中只要有如下配置即可完成调用:
很明显,action的name属性必须要和表单中的action属性一致。
其中showdetails为struts.xml下的另一Action:
显然,使用超链接时我们使用了相对URL,以上代码中的"./showdetails.action"即为相对URL。要注意的是,使用这种方法是必须明确struts.xml中Action所在package的namespace属性,这里我的设置为"/",即项目根文件夹,如果是其他目录,还需要在"/XX.action"前加上该目录。
在后台对应第一个Action的类为AuthorSearch,代码如下:
public class AuthorSearch implements Action {
private Author author;
@Override
public String execute() throws Exception {
//do something
return null;
}
}
Author的定义如下:
在代码运行时,Struts2框架会“自动”为author.authorname赋值,其值为表单中用户所输入的内容,这是如何实现的呢?原来在底层,Struts2框架是这样实现的:
1.调用request.getParameterNames()方法获取所有的参数名。我们在JavaEE的API文档中可以看到这个方法的描述:
![](https://img-blog.csdn.net/20161002135930300)
2.对以上方法返回的每个String执行Action.getMethod("set" + String的首字母大写)。例如上面举例的表单中我们的参数名为author.authorname,执行后所调用的method为author.setAuthorname(),而在Author类中,该方法正是authorname的setter方法,由此便完成了对author.authorname的赋值。
所以,当出现Error setting expression 'author.authorname' with value ['XXX', ]的错误时,我们就要检查是否为authorname设置了符合要求的setter方法以及前端的参数名是否与后台的变量名匹配。
一.Action调用
1.通过表单调用
表单调用是最为常见的调用方法,只要搞清表单与Action之间的对应方法即可完成调用:<form action="authorsearch" method="get"> input author's name:<input type="text" name="author.authorname"> <input type="submit" value="search"> </form>
这是一个简单的表单,其中action属性即可说明该表单所对应的action,在struts.xml中只要有如下配置即可完成调用:
<action name="authorsearch" class="lab2.AuthorSearch"> <result name="success">/WEB-INF/content/authorsearchresult.jsp</result> <result name="error">/WEB-INF/content/error.jsp</result> </action>
很明显,action的name属性必须要和表单中的action属性一致。
2.通过超链接调用
如果想实现点击某个文字或图片后在后台执行Java代码,就要使用超链接调用Action:<td><a href="./showdetails.action?bookname.title=${l.title}">${l.title }</a></td>
其中showdetails为struts.xml下的另一Action:
<action name="showdetails" class="lab2.ShowDetails"> <result name="success">/WEB-INF/content/details.jsp</result> <result name="error">/WEB-INF/content/error.jsp</result> </action>
显然,使用超链接时我们使用了相对URL,以上代码中的"./showdetails.action"即为相对URL。要注意的是,使用这种方法是必须明确struts.xml中Action所在package的namespace属性,这里我的设置为"/",即项目根文件夹,如果是其他目录,还需要在"/XX.action"前加上该目录。
二.参数处理
注意观察上面的表单和超链接,便能发现author.authorname以及bookname.title这样的变量,它们的作用是向后台的Java代码传递参数。在表单的例子中,author.authorname的值为用户输入,而超链接中的"${l.title }"为jsp的EL表达式,这些都是需要交给后台处理的参数,需要通过Action传送到后台,下面用表单的例子说明。在后台对应第一个Action的类为AuthorSearch,代码如下:
public class AuthorSearch implements Action {
private Author author;
@Override
public String execute() throws Exception {
//do something
return null;
}
}
Author的定义如下:
public class Author { private int authorid; private String authorname; private String age; private String country; public int getAuthorid() { return authorid; } public void setAuthorid(int authorid) { this.authorid = authorid; } public String getAuthorname() { return authorname; } public void setAuthorname(String authorname) { this.authorname = authorname; } public String getAge() { return age; } public void setAge(String age) { this.age = age; } public String getCountry() { return country; } public void setCountry(String country) { this.country = country; } }
在代码运行时,Struts2框架会“自动”为author.authorname赋值,其值为表单中用户所输入的内容,这是如何实现的呢?原来在底层,Struts2框架是这样实现的:
1.调用request.getParameterNames()方法获取所有的参数名。我们在JavaEE的API文档中可以看到这个方法的描述:
2.对以上方法返回的每个String执行Action.getMethod("set" + String的首字母大写)。例如上面举例的表单中我们的参数名为author.authorname,执行后所调用的method为author.setAuthorname(),而在Author类中,该方法正是authorname的setter方法,由此便完成了对author.authorname的赋值。
所以,当出现Error setting expression 'author.authorname' with value ['XXX', ]的错误时,我们就要检查是否为authorname设置了符合要求的setter方法以及前端的参数名是否与后台的变量名匹配。
相关文章推荐
- 使用<a>标签调用struts2的action、传递动态参数、以及参数中出现加号等特殊字符的处理方法
- struts2 笔记01 登录、常用配置参数、Action访问Servlet API 和设置Action中对象的值、命名空间和乱码处理、Action中包含多个方法如何调用
- Struts2中的Action的创建以及Action中的方法调用
- struts2的常量、动态方法调用、接受请求参数处理、类型转换
- Struts2学习---基本配置,action,动态方法调用,action接收参数
- Struts2输入校验以及错误信息处理(1)——用Action中定义的validate()方法进行校验
- 笔记01 登录、常用配置参数、Action访问Servlet API 和设置Action中对象的值、命名空间和乱码处理、Action中包含多个方法如何调用
- Struts2 ognl调用action有参数的方法
- struts2通配符的应用以及action、result、package的name和namespace属性同名时的处理方法
- Struts2 ognl调用action有参数的方法
- struts2如何动态调用action的方法以及使用json插件范围json格式的javascript对象
- 动态方法调用 在Struts2中动态方法调用有三种方式,动态方法调用就是为了解决一个Action对应多个请求的处理,以免Action太多 第一种方式:指定method属性 这种方式我们前面已经用到过
- Struts2学习---基本配置,action,动态方法调用,action接收参数
- struts2的常量、动态方法调用、接受请求参数处理、类型转换 .
- Struts2中action接受参数方法
- Struts2 action的扩展名两种修改方法
- struts2 action中获取jsp页面的参数的方法
- Struts2中一个Action多个请求处理方法的三种实现方式
- struts2的Action中调用DAO方法时报空指针异常 解决办法
- Struts2一个Action内包含多个请求处理方法的处理