一:静态数据封装
静态数据封装,就是将数据写死
struts.xml
<package name="staticparam" extends="struts-default">
<action name="staticParam" class="staticParam.StaticParamAction" method="login">
<param name="username">123</param>
<param name="password">123</param>
</action>
</package>
Action
public class StaticParamAction {
private String username;
private String password;
public String login(){
System.out.println("u:"+username+"p:"+password);
return null;
}
public StaticParamAction() {
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
}
二:动态参数封装
动态参数封装:属性驱动-普通属性(提供set get)方法
Action
public class UserAction extends ActionSupport{
private String username;
private String password;
public String login(){
System.out.println("u:"+username+"p:"+password);
return null;
}
public UserAction() {
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
}
jsp
<form action="${pageContext.request.contextPath}/login1.action" method="post">
<label for="user">用户名:</label>
<br>
<input id="user" name="username" type="text">
<br>
<label for="password">密码:</label>
<br>
<input id="password" name="password" type="text">
<br>
<input type="submit" value="登录">
</form>
跟静态参数封装一样,只不过这里获取的是表单中的参数,也就是请求发送过来的数据.依靠的拦截器params,其中该拦截器做的事有两件
一是对提交的参数进行数据校验,判断是否合法,判断是否合法的标准就是拦截器中的excludeParams参数的正则表达式的值.
二是将其封装到值栈中的栈顶元素中去,而当前action就在栈顶,所以能够将参数放入action中
动态参数封装:属性驱动–复杂属性:OGNL
Action
public class PersonAction extends ActionSupport {
private Person person;
public String login(){
System.out.println(person);
return null;
}
public Person getPerson() {
return person;
}
public void setPerson(Person person) {
this.person = person;
}
}
JSP
<form action="${pageContext.request.contextPath}/login2.action" method="post">
<label for="user">用户名:</label>
<br>
<input id="user" name="person.username" type="text">
<br>
<label for="password">密码:</label>
<br>
<input id="password" name="person.password" type="text">
<br>
<input type="submit" value="登录">
</form>
在jsp页面的person.username和person.password 其实就是OGNL表达式,代表着往根(root ,值栈valueStack)中存放值,而值栈中的栈顶元素也就是为当前action,我们在action中设置person的set get属性,即可让存进来的值匹配到,进而将对应属性赋值成功
模型驱动
action
public class CustomerAction extends ActionSupport implements ModelDriven<Customer> {
//必须实例化
private Customer customer = new Customer();
public String login(){
System.out.println(customer);
return null;
}
public Customer getCustomer() {
return customer;
}
public void setCustomer(Customer customer) {
this.customer = customer;
}
@Override
public Customer getModel() {
return customer;
}
}
jsp
<form action="${pageContext.request.contextPath}/login3.action" method="post">
<label for="user">用户名:</label>
<br>
<input id="user" name="username" type="text">
<br>
<label for="password">密码:</label>
<br>
<input id="password" name="password" type="text">
<br>
<input type="submit" value="登录">
</form>
必须实现ModelDriven接口 ,提供一个getModel()
ModelDriven拦截器将getModel方法返回的结果压入职栈,而我们的表单参数会从值栈中从上往下进行查找,自然就直接将参数封装到对象中了