Struts 2中,jsp页面向后台action传参,主要使用三种方法:
- 直接传参
- 对象传参
- ModelDriven
struts配置:
<package name="default" namespace="/" extends="struts-default">
<action name="User1_*" class="cen.ner.action.UserAction1" method="{1}">
<result>/index.jsp</result>
</action>
<action name="User2_*" class="cen.ner.action.UserAction2" method="{1}">
<result>/index.jsp</result>
</action>
</package>
1. 直接传参
直接传参方法,action中可以直接获取form表单中的数据。
form:
<h1>获取页面参数(直接赋值)</h1>
<form action="User1_register1" method="post">
账号:<input type="text" name="username" /><br>
密码:<input type="text" name="password" /><br>
<input type="submit" value="提交">
</form>
action:
package cen.ner.action;
import com.opensymphony.xwork2.ActionSupport;
import cen.ner.entity.User;
public class UserAction1 extends ActionSupport{
private static final long serialVersionUID = 1L;
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 register1() {
System.out.println("register1");
System.out.println("username: " + username);
System.out.println("password: " + password);
return SUCCESS;
}
}
2. 对象传参
对象传参,可以直接使用对象对应的get和set进行传值。此时应注意,前台数据标签必须对应,如下面代码中对user的username和password进行了传值,则前台username和password对应的名称必须为“user.username”和“user.password”。
form:
<h1>获取页面参数(对象赋值)</h1>
<form action="User1_register2" method="post">
账号:<input type="text" name="user.username" /><br>
密码:<input type="text" name="user.password" /><br>
<input type="submit" value="提交">
</form>
action:
package cen.ner.action;
import com.opensymphony.xwork2.ActionSupport;
import cen.ner.entity.User;
public class UserAction1 extends ActionSupport{
private static final long serialVersionUID = 1L;
private User user;
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public String register2() {
System.out.println("register2");
System.out.println("username.getUsername(): " + user.getUsername());
System.out.println("password.getPassword(): " + user.getPassword());
return SUCCESS;
}
}
3. ModelDriven
第二种方式,在前台不够友好,ModelDriven结合了方法1和方法2,在form表单中不用输入对象名,但名称必须一一对应。
form:
<h1>获取页面参数(ModelDriven)</h1>
<form action="User2_register" method="post">
账号:<input type="text" name="username" /><br>
密码:<input type="text" name="password" /><br>
<input type="submit" value="提交">
</form>
action:
package cen.ner.action;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
import cen.ner.entity.User;
public class UserAction2 extends ActionSupport implements ModelDriven<User>{
private static final long serialVersionUID = 1L;
private User user;
@Override
public User getModel() {
System.out.println("ModelDriven");
this.user = new User();
return this.user;
}
public String register() {
System.out.println("register");
System.out.println("username.getUsername(): " + user.getUsername());
System.out.println("password.getPassword(): " + user.getPassword());
return SUCCESS;
}
}