美文网首页Java学习笔记Structs2
Struts2 | 详解如何在jsp页面中获取值栈中的数据

Struts2 | 详解如何在jsp页面中获取值栈中的数据

作者: 小胖0_0 | 来源:发表于2017-01-23 00:57 被阅读2985次

上一篇文章我们已经了解了如何在struts2的值栈中存数据,那么这篇文章我们就一起来了解一下如何在jsp页面中获取值栈中的数据

1 获取使用set方法存入值栈中的值

在上一篇文章中我们已经了解到,使用set方法向值栈中存值,使用的是map方式,那么就有key和value,取值时我们只需根据key来取就可以了。

代码演示如下:

首先我们使用set方法向值栈中存入一个值,关键代码:

//1 获取值栈对象
ActionContext context = ActionContext.getContext();
ValueStack stack = context.getValueStack();

//2 调用值栈对象中的set方法
stack.set("demo", "DemoData");        
return "success";

然后我们在jsp页面中使用struts标签获取值栈中的这条数据,关键代码:

<!--导入struts标签库-->
<%@ taglib uri="/struts-tags" prefix="s"%>

<!-- 获取set方法设置的值  根据名称获取值-->
<s:property value="demo"/>

2 获取使用push方式存入值栈中的值

由上一篇文章可知,push方式存值是没有map结构的,那么没有key,我们如何取值呢?事实上struts2中将push方法存入值栈中的值都放在一个名为top的集合中,那么我们只需利用这个集合便可获取到其中的值

代码示例:

首先我们还是先用push方法将数据放入到值栈中去,关键代码:

 //1 获取值栈对象
ActionContext context = ActionContext.getContext();
ValueStack stack = context.getValueStack();

//2 调用值栈对象中的push方法
stack.push("abcd");    
return "success";

然后在jsp页面中获取值栈中的值,关键代码:

<!--导入struts标签库-->
<%@ taglib uri="/struts-tags" prefix="s"%>

<!-- 获取push方法设置的值 -->
<s:property value="[0].top"/>

这里需要特别注意jsp页面中使用ognl表达式获取list集合中元素的写法,不是 top[0] 而是 [0].top ,和我们在java代码中取list集合元素的写法是有区别的。

3 获取使用变量的get方法存入值栈中的值

这是往值栈中存值最常用的方法,这里我们将其分为取字符串,取对象和取list集合三种方式分别演示。

1 获取get方式存入值栈中的字符串

首先我们先使用变量方法存入一个字符串到值栈中,关键代码:

private String username;
public String getUsername(){
  return username;
}

public String execute() throws Exception {
  username = "demo";
  retrun "success";
}

然后我们在jsp页面中获取这个字符串的值,关键代码:

<!--导入struts标签库-->
<%@ taglib uri="/struts-tags" prefix="s"%>

<!--使用s标签获取username的值-->
<s:property value="username" />

2 获取get方式存入值栈中的对象

首先将对象存入到值栈中去,关键代码:

private User user = new User();
public User getUser(){
  return user;
}

public String execute() throws Exception {
  user.setUsername("demo");
  user.setPassword(123456);
  user.setAddress("beijing");

  return "success";
}

然后在jsp页面中获取这个对象,关键代码:

<!--导入struts标签库-->
<%@ taglib uri="/struts-tags" prefix="s"%>

<!--使用struts2标签获取对象的数据-->
<s:property value="user.username"/>
<s:property value="user.password"/>
<s:property value="user.address"/>

3 获取get方式存入值栈中的list集合

首先将list集合存入值栈,关键代码:

    private List<User> list = new ArrayList<User>();
    public List<User> getList() {
        return list;
    }

    public String execute() throws Exception {
        User user1 = new User();
        user1.setUsername("小奥");
        user1.setPassword("123");
        user1.setAddress("美国");
        
        User user2 = new User();
        user2.setUsername("小王");
        user2.setPassword("250");
        user2.setAddress("越南");
        
        list.add(user1);
        list.add(user2);
        
        return "success";
    }

然后在jsp页面中获取list中的数据,在jsp中获取值栈中的list有三种方式,下面我们分别演示,关键代码:

        <!--导入struts标签库-->
        <%@ taglib uri="/struts-tags" prefix="s"%>

    <! 获取值栈list集合数据 -->

    获取list的值第一种方式:
        <br/>
    <s:property value="list[0].username"/>
    <s:property value="list[0].password"/>
    <s:property value="list[0].address"/>
    <br/>
    <s:property value="list[1].username"/>
    <s:property value="list[1].password"/>
    <s:property value="list[1].address"/>

    获取list的值第二种方式:
    <br/>
    <!-- 使用struts2标签 类似jstl的foreach标签
        s:iterator:遍历值栈的list集合
     -->
     <s:iterator value="list">
        <!-- 遍历list得到list里面每个user对象 -->
        <s:property value="username"/>
        <s:property value="password"/>
        <s:property value="address"/>
        <br/>
     </s:iterator>

    获取list的值第三种方式:
    <br/>
    <s:iterator value="list" var="user">
        <!-- 
            遍历值栈list集合,得到每个user对象
            机制: 把每次遍历出来的user对象放到 context里面
            获取context里面数据特点:写ognl表达式,需要
            使用特殊符号 #
         -->
        <s:property value="#user.username"/>
        <s:property value="#user.password"/>
        <s:property value="#user.address"/>
        <br/>
    </s:iterator>

这里第一和第二种方法都比较好理解,第三种方法需要注意的地方在:在s:iterator 标签时如果使用了var属性,那么struts2会在值栈的context部分新开辟一个临时空间,并将遍历出来的list集合中的元素放到这个临时空间中,那么这时候再使用ognl表达式获取数据要使用#号,否则无法取出数据。

这样可以避免浪费root部分的空间,加快检索的速度,因为我们通常操作数据都是操作root部分。


总结:

以上就是在jsp页面中取出值栈中值的几种办法,其中以第三中方法最常用,每种方法最好都要掌握,灵活运用即可。

相关文章

网友评论

    本文标题:Struts2 | 详解如何在jsp页面中获取值栈中的数据

    本文链接:https://www.haomeiwen.com/subject/xlaobttx.html