Struts2接收参数的方法有3种分别是:
1.用Action的属性接收参数
2.用DomainModel接收参数
3.用ModelDriven接收参数
一:用Action的属性接收参数的例子如下:
UI页面代码如下:
<body> 使用action属性接收参数<a href="user/user!add?name=credo&age=25">添加用户</a> </body>
Action代码如下:
package org.credo.struts2.user.action; import com.opensymphony.xwork2.ActionSupport; public class UserAction extends ActionSupport { private String name; private int age; public String add() { System.out.println("name=" + name); System.out.println("age=" + age); return SUCCESS; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
可以看到,在action种定义了name和age,并且get和set.
那么就可以直接进行传参,?name=credo&age=25
在action种将获取到这些值.
二.用DomainModel接收参数例子如下:
DomainModel是指域模型,就是model.最常用的一种.
UI代码:
<body> 使用Domain Model接收参数<a href="user/user!add?user.name=credo&user.age=25">添加用户</a>
Action代码:
public class UserAction extends ActionSupport { private User user; public String add() { System.out.println("name=" + user.getName()); System.out.println("age=" + user.getAge()); return SUCCESS; } public User getUser() { return user; } public void setUser(User user) { this.user = user; } }
DoMainModel代码:
public class User { private String name; private int age; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
像上面这样就是使用dimainmodel来接收参数.
如果说User只有name,age,但是页面有额外的其他参数,如sex等.
可以使用一个VO来接收参数.
public class UserVO { private String name; private String password; private String confirmingPassword;
//GET AND SET }
这里的dimainmodel就是为了公用吧.VO针对点.
三.用ModelDriven接收参数,不常用
模型驱动这种方法并不常用.
UI代码:
<body> 使用ModelDriven接收参数<a href="user/user!add?name=credo&age=25">添加用户</a>
Action代码:
注意:实现了ModelDriven.<User>,并且需要new一个User.
public class UserAction extends ActionSupport implements ModelDriven<User>{ private User user = new User(); public String add() { System.out.println("name=" + user.getName()); System.out.println("age=" + user.getAge()); return SUCCESS; } @Override public User getModel() { return user; } }
Model->User.java代码:
public class User { private String name; private int age; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
实现了ModelDriven.<User>,进入action,将给新new出的User的name和age进行自动赋值.这种方法不常用.如图所示:
2.在struts.xml中:
<!-- 让参数可以传中文 --> <constant name="struts.i18n.encoding" value="GBK" />
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <!-- <constant name="struts.enable.DynamicMethodInvocation" value="false" /> <constant name="struts.devMode" value="false" /> <package name="default" namespace="/" extends="struts-default"> <default-action-ref name="index" /> <global-results> <result name="error">/error.jsp</result> </global-results> <global-exception-mappings> <exception-mapping exception="java.lang.Exception" result="error"/> </global-exception-mappings> <action name="index"> <result type="redirectAction"> <param name="actionName">HelloWorld</param> <param name="namespace">/example</param> </result> </action> </package> <include file="example.xml"/> --> <!-- 下面是设定开发模式,设定为true,方便修改action name后的热部署 --> <constant name="struts.devMode" value="true" /> <!-- 让参数可以传中文 --> <constant name="struts.i18n.encoding" value="GBK" /> <!-- package区分包,name space是访问路径,如 name是user,namespace就是/user,按模块划分 --> <!-- namespace不写,就等于namespace="",URL为任意项目名/xxx下的index --> <package name="default" namespace="/" extends="struts-default">
不过好像貌似没用.