一:什么是值栈:struts2里面本身提供的一种存储机制,类似于域对象,值栈,可以存值和取值
特点:先进后出,最上面的元素叫做栈顶,也叫压栈。
<s:debug></s:debug>可以看到栈的元素,栈的结构为root和context,root返回的结构是list集合,context返回的是map集合
二:action和servlet区别:
每次访问的action的时候,都会创建一个新的action对象,而servlet只会创建一个对象
注意:每次访问action都会创建一个action对象,action对象里面都且只有一个值栈的对象
三:值栈的对象:
ActionContext ac=ActionContext.getContext();
ValueStack v1=ac.getValueStack();
不常用,通常都是使用ognl表达式来取值,下面来讲几种实例,在此之前要先在jsp中导入标签库<%@ taglib prefix="s" uri="/struts-tags"%>
三:向值栈里面保存变量并取值
01):保存变量
private String name;
public String getName() {
return name;
}
@Override
public String execute() throws Exception {
name = "张三";
}
02):取值
<s:property value="name" />
四:向值栈里面保存对象并取值:
01):创建preson的类,实例化,得到get的方法
private Person person = new Person();
public Person getPerson() {
return person;
}
@Override
public String execute() throws Exception {
person.setName("张安");
person.setAge(1);
person.setSex("女");
}
02):取值(对象名.属性名):
<s:property value="person.name" />
<s:property value="person.age" />
<s:property value="person.sex" />
五:向值栈里保存集合并取值
01):实例化一个list集合
private List<Person> lp = new ArrayList<Person>();
public List<Person> getLp() {
return lp;
}
@Override
public String execute() throws Exception {
lp.add(new Person("李四",1,"男"));
lp.add(new Person("王五",2,"女"));
}
02):取值
<!-- 取集合的值01 --> <s:property value="lp[0].name" /> <s:property value="lp[1].name" /> <br> <!-- 取集合的值02 --> <s:iterator value="lp"> <s:property value="name" /> <s:property value="age" /> <s:property value="sex" /> <br> </s:iterator> <!-- 取集合的值03 加了var属性后就是从context里面取值,所以要加#号 --> <s:iterator value="lp" var="l"> <s:property value="#l.name" /> <s:property value="#l.age" /> <s:property value="#l.sex" /> </s:iterator>
六:向值栈里添加域对象的值
01):向值栈里面添加
@Override
public String execute() throws Exception {
//域对象
HttpServletRequest request=ServletActionContext.getRequest();
request.setAttribute("abc", "域对象的值");
return SUCCESS;
}
02):取值
<s:property value="#request.abc" />
七:在form标签里面使用属性值:
<s:textfield name="text" value="%{name}"></s:textfield>(使用%{}就可以转)
八:form标签:
<!-- from标签 -->
<s:form action="" method="post">
<!-- 相当于text 文本框 -->
<s:textfield></s:textfield>
<!-- 密码框 -->
<s:password></s:password>
<!-- 单选框 必须有name属性值 -->
<s:radio list="#{'1':'男','2':'女'}" value="1" name=""></s:radio>
<!-- 多选框,name属性必须要 -->
<s:checkboxlist list="#{'1':'皮皮虾','2':'糖醋鱼','3':'炒年糕'}" value="1" name=""></s:checkboxlist>
<!-- 下拉框,用combox的话就会带一个文本框绑定value值 -->
<s:select list="#{'1':'皮皮虾','2':'糖醋鱼','3':'炒年糕'}" ></s:select>
<!-- 提交 -->
<s:submit></s:submit>
<!-- 重置 -->
<s:reset></s:reset>
</s:form>
效果图: