struts框架问题六之从值栈中获取值

  6. 问题六: 在JSP中获取值栈的数据
    * 总结几个小问题:
        > 访问root中数据 不需要#
        > 访问context其它对象数据 加 #
        > 如果向root中存入对象的话,优先使用push方法。
        > 如果向root中存入集合的话,优先要使用set方法。

    * 在OgnlContext中获取数据
        > 在Action中向域对象中存入值
        > request:<s:property value="#request.username"/>
        > session:<s:property value="#session.username"/>
        > application:<s:property value="#application.username"/>
        > attr:<s:property value="#attr.username"/>
        > parameters:<s:property value="#parameters.cid"/>

6.1 代码如下
    <!--
        // vs.push("美美");这句代码在action中写
        // 获取到栈顶的值
        <s:property value="[0].top"/>这句代码在jsp中写的。方括号里面的值为从root栈中的第几个位置开始读,一直读到最后。
    -->

    <!--
        // 栈顶是map集合,通过key获取值
        vs.set("msg", "小凤");
        <s:property value="[0].top.msg"/>
    -->

    <!--  
        vs.push(user);
        // 栈顶放user对象
        <s:property value="[0].top.username"/>
        <s:property value="[0].top.password"/>
        // [0].top 关键字是可以省略的  findValue()
        <s:property value="username"/>
    -->

    <!--
    User user=new User();
    user.setusername("zhangsan");
    user.setpassword("123");
    vs.set("user", user); <s:property value="[0].top.user.username"/> <s:property value="[0].top.user.password"/> // 省略关键字,如果想要获取的元素本来就是栈顶元素的时候,可以省略前面的[0].top <s:property value="user.username"/> --> <!-- // 在ValueStack1Action提供了成员的属性 private User user = new User("小泽","456"); public User getUser() { return user; } public void setUser(User user) { this.user = user; } User user = new User("小苍","123"); vs.set("user", user); // 从栈顶开始查找,找user的属性,显示名称 返回的小苍 <s:property value="user.username"/> // [1].top获取ValueStack1Action [1].top.user返回user对象 [1].top.user.username获取对象的属性名称 <s:property value="[1].top.user.username"/> --> <!-- 栈顶是list集合 vs.push(ulist); <s:property value="[0].top[0].username"/> <s:property value="[0].top[1].username"/> --> <!-- vs.set("ulist", ulist); <s:property value="ulist[0].username"/> --> <!-- 迭代的标签 属性 * value 要迭代的集合,需要从值栈中获取 * var 迭代过程中,遍历的对象 * var编写上,把迭代产生的对象默认压入到context栈中,从context栈取值,加#号 * var不编写,默认把迭代产生的对象压入到root栈中 for(User user:ulist){} // 编写var的属性 <s:iterator value="ulist" var="u"> <s:property value="#u.username"/>加了#存到了context中 <s:property value="#u.password"/> </s:iterator> // 没有编写var关键字 <s:iterator value="ulist"> <s:property value="username"/>没有加#存到了root中 <s:property value="password"/> </s:iterator> --> <!-- 从context栈中获取值,加#号 HttpServletRequest request = ServletActionContext.getRequest();向context中存储值,就是向域中存储值 request.setAttribute("msg", "美美"); request.getSession().setAttribute("msg", "小风"); <s:property value="#request.msg"/> <s:property value="#session.msg"/> <s:property value="#parameters.id"/> <s:property value="#attr.msg"/> --> <!-- 在JSP页面上,查看值栈的内部结构 --> <s:debug></s:debug>

猜你喜欢

转载自www.cnblogs.com/wyhluckdog/p/10124739.html