三种传值方式:
1,第一种方式是直接用参数来接受数值:
使用action属性接收参数<a href="user/user!add?name=a&age=8">添加用户</a>,
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;
}
2,使用Domain Model接收参数<a href="user/user!add?user.name=哈啊&user.age=8">添加用户</a>
private User user;
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
3,使用dto,dto在传值的过程中起到的作用是搬运。设计一个与需要传递表单对应的对象去接受,然后再new domain model(dto);
中文传值问题:
1,System.out.println("name=" + new String(user.getName().getBytes("iso8859-1"),"gb2312"));
2, <!--这个是struts的bug-->
<constant name="struts.i18n.encoding" value="gbk" /> <!-- internationalization -->这不知道能不能用
3,过滤器用老的:
<filter>
<filter-name>struts2</filter-name>
<!--<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>-->
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
简单的数据校验:
public String add() {
if(name == null || !name.equals("admin")) {
this.addFieldError("name", "name is error");
this.addFieldError("name", "name is too long");
return ERROR;
}
return SUCCESS;
}
<!---需要调用structs的标签库--><%@taglib uri="/struts-tags" prefix="s" %><!--调用的是structs的标签库-->
!---User Add Error!
<s:fielderror fieldName="name" theme="simple"/>
<br />
<s:property value="errors.name[0]"/>
<s:debug></s:debug>