值栈中存取数据

       会把请求传递的参数存储在值栈之中,同时把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>

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值