会把请求传递的参数存储在值栈之中,同时把Action对象也会压入栈中,属性对象在上边,Action在下边,对象的值既可以从栈顶取,也可以从Action的person属性中来取。
public class PersonAction extends ActionSupport implements ModelDriven<Person> {
private String username;
// 接收到的数据会自动放入值栈之中
private Person person = new Person();
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public Person getPerson() {
return person;
}
public void setPerson(Person person) {
this.person = person;
}
public String contextmaptext() throws Exception {
System.out.println(username);
// 获得动作类的上下文
/**
* ActionContext包含了contextmap和valuestack
*/
ActionContext ac = ServletActionContext.getContext();
// 在contextmap存储数据,默认的相当于request,因为ActionContext的生命周期和request一样都是第一次请求
ac.put("username", "张三");
// 把数据存储在会话范围
ac.getSession().put("user", "周大大");
// 在应用范围内存数据
ac.getApplication().put("pv", 23313513);
return super.execute();
}
@Override
public Person getModel() {
return person;
}
}
从值栈中取数据ognl表达式不需要“#”:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib uri="/struts-tags" prefix="s" %>%
<html>
<head>
<title>$Title$</title>
</head>
<body>
<s:debug></s:debug>
<s:property value="person.personId"/>
<s:property value="person.pName"/>
<s:property value="person.gender"/>
</body>
</html>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib uri="/struts-tags" prefix="s" %>%
<html>
<head>
<title>$Title$</title>
</head>
<body>
<s:property value="#username"/>
<s:property value="#session.user"/>
<s:property value="#application.pv"/>
<s:debug></s:debug>
<s:property value="username"/>
<s:property value="person.personId"/>
<s:property value="person.pName"/>
<s:property value="person.gender"/>
<hr>
<s:property value="personId"/>
<s:property value="pName"/>
<s:property value="gender"/>
</body>
</html>
手动通过栈放入的数据也会放入栈顶,但是在Action对象中不会存储在相应属性数据
public class PersonAction extends ActionSupport implements ModelDriven<Person> {
private String username;
private Person person = new Person();
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public Person getPerson() {
return person;
}
public void setPerson(Person person) {
this.person = person;
}
@Override
public String execute() throws Exception {
ActionContext ac = ServletActionContext.getContext();
Person person2 = new Person(2, "xxx", 2);
// 获得值栈
ValueStack valueStack = ac.getValueStack();
// 把person2压栈
valueStack.push(person2);
return super.execute();
}
@Override
public Person getModel() {
return person;
}
}
取不是栈顶的值
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib uri="/struts-tags" prefix="s" %>%
<html>
<head>
<title>$Title$</title>
</head>
<body>
<s:property value="#username"/>
<s:property value="#session.user"/>
<s:property value="#application.pv"/>
<s:debug></s:debug>
<h3>从栈顶取Action对象中的值</h3>
<s:property value="username"/>
<s:property value="person.personId"/>
<s:property value="person.pName"/>
<s:property value="person.gender"/>
<hr>
<h3>从栈顶的model对象中取值</h3>
<s:property value="personId"/>
<s:property value="pName"/>
<s:property value="gender"/><hr>
<h3>取栈中从栈顶数相同属性第二个的值</h3>
<s:property value="[1].personId"/>
<s:property value="[1].pName"/>
<s:property value="[1].gender"/>
</body>
</html>
今天的文章值栈中存取数据分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/61694.html