实训做了一个s2sh项目有些知识盲点,struts2的action传参机制是:参数从jsp(也可以是其他前端页面如HTML)页面发送到后台action,在到达action前,会经过struts2本身的各种过滤器进行筛选过滤,这个过程会报错,导致action接收不到参数,例如时间类参数,从页面传来的参数都为字符串类型。需要struts2的过滤器进行解析,如果struts2的过滤器识别不了页面传来的字符串格式,就无法解析,如struts2只能识别(2017-03-33 34:23:56)这一种时间格式,其他传来的格式struts2无法解析,这时候就只能自己将数据解析成struts2识别的格式,再赋值给action中的Date类型的参数。
当在action获取数据,想要将其传到要转到的页面时,需要action中有这个参数的get和set方法,然后struts2会自动将数据传到要转到的页面,在页面用EL表达式获取数据。
例如:有一个action
@@Autowired
private PersonService perosnService;
private List<Person> personlist;
@Action(value="home",results={@Result(name="success",location="/WEB- INF/jsp/manager/manager_home.jsp")})
public String home(){
personlist=personService.findAll();
return SUCCESS;
}
如上代码,在action中获取了person表中所有的数据,如何将personlist这个参数传到要转到的页面呢?
很简单,只要有personlist的get和set方法就行了,struts2会将action中的数据全都自动传到要转的页面
,在页面中可以直接用${ personlist}获取,personlist代表的是 getPersonlist()方法
完整的代码应该是这样的:
@Autowired
private PersonService perosnService;
private List<Person> personlist;
@Action(value="home",results={@Result(name="success",location="/WEB- INF/jsp/manager/manager_home.jsp")})
public String home(){
personlist=personService.findAll();
return SUCCESS;
}
public List<personlist> getPersonlist() {
return personlist;
}
public void setPersonlist(List<Person> personlist) {
this.personlist = personist;
}