Struts2 接收参数的三种方式
程序员文章站
2022-05-08 16:10:08
...
Action接收参数的三种方式:
1:使用action的属性接收参数
2:使用DomainModel接收参数
3:使用ModelDriven接收参数
第一种方式接收参数:
第一种方式:
把表单的数据提交到LoginAction.action
struts.xml文件配置:
<action name="LoginAction" method="login" class="com.action.LoginAction">
<result>/LoginSuccess.jsp</result>
</action>
action name一定是表单的提交action 调用该action的login方法
public class LoginAction extends ActionSupport {
private String username;
private String password;
public String login(){
System.out.println(username);
return SUCCESS;
}
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;
}
}
Login.jsp页面form表单 只有用户和密码 form的action=”LoginAction.action”
在控制台输出username值
但是该方法缺点: 如果一个页面有很多个参数就会创建很多个变量 显得很麻烦
第二种方式接收参数:
第二种方式就是使用面向对象的思想 把属性封装在User中 只是在action中调用User对象就好了
但是如果有两个User对象就需要知道表单的值到底是传给那个User对象的 所以需要在表单的name中添加User对象名.就好了
import com.opensymphony.xwork2.ActionSupport;
import com.po.User;
public class LoginAction extends ActionSupport {
private User user;
public String login(){
System.out.println(user.getUsername());
return SUCCESS;
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
}
public class User {
private String username;
private String password;
//get和set方法
<form action="LoginAction.action" method="post" name="LoginForm">
用户:<input type="text" name="user.username" value=""/>
密码:<input type="password" name="user.password" value=""/><br>
<input type="submit" value="提交"/><br>
</form>
======值得注意的是:
我之前使用的是get方式提交表单
在 System.out.println(user.getUsername());报空指针异常
但是使用post提交的时候就可以正常运行 暂时还不知道原因
使用第三种方式接收参数:
1:必须要实现接口:modelDriven
2:对象必须要实例化 不需要get和set方法
3:重写@Override
public User getModel() {
return user;
}
其中T 为实例化的对象的引用
这样的好处是不需要在表单中声明是哪个对象实例获得的参数
public class LoginAction extends ActionSupport implements ModelDriven<User> {
private User user =new User();
public String login(){
System.out.println(user.getUsername());
return SUCCESS;
}
@Override
public User getModel() {
return user;
}
}
<form action="LoginAction.action" method="post" name="LoginForm">
用户:<input type="text" name="username" value=""/>
密码:<input type="password" name="password" value=""/><br>
<input type="submit" value="提交"/><br>
</form>
以上这些都是传的单个值 下面的传的两个集合 :String , User对象集合
但是数组不能传
public class LoginAction extends ActionSupport implements ModelDriven<User> {
private User user =new User();
public String login(){
System.out.println(user.getBookList().get(0));
System.out.println(user.getBookList().get(1));
System.out.println(user.getUserlist().get(0).getUsername());
System.out.println(user.getUserlist().get(1).getUsername());
return SUCCESS;
}
private String username;
private String password;
private List<String> bookList;
private List<User> userlist;
//get和set方法
<form action="LoginAction.action" method="post" name="LoginForm">
用户:<input type="text" name="username" value="" />
密码:<input type="password" name="password" value="" /><br>
书籍1:<input type="text" name="bookList[0]" value="" /><br>
书籍2:<input type="text" name="bookList[1]" value="" /><br>
人1:<input type="text" name="userlist[0].username" /><br>
人2:<input type="text" name="userlist[1].username" /><br>
年龄:<input type="text" name="age" value=""/>
<input type="submit" value="提交" /><br>
</form>