获取值栈中的数据

从值栈获取数据

  • 使用struts2的标签+ognl表达式获取值栈数据
    • 在jsp中使用struts2标签+ognl表达式获取

从值栈中获取字符串

  • 向值栈中放字符串
  • 在页面中获取值
public class StringAction extends ActionSupport {
        private String username;

           public String getUsername() {
            return username;
        }

        public void setUsername(String username) {
            this.username = username;
        }

        @Override
        public String execute() throws Exception {
            username="i love susu";
            return SUCCESS;
        }
}
 name="string" class="cn.itcast.eitity.StringAction">
                         <result name="success">/string.jspresult>
                 
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@taglib uri="/struts-tags" prefix="s"%>

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title heretitle>
head>
<body>
           <s:debug>s:debug>
           <br/>
          <s:property value="username"/>
body>
html>

获取值栈中的数据_第1张图片

从值栈中获取对象

public class ObjectValueStackDemoAction extends ActionSupport{

         private User user=new User();
               public User getUser() {
            return user;
        }
            public String execute() throws Exception {
                   user.setUsername("123456");
                   user.setPassword("321");
                   user.setAddress("华山");

                   return SUCCESS;
               }
}
name="ObjectValueStack" class="cn.itcast.eitity.ObjectValueStackDemoAction">
                        <result name="success">/valuestack.jspresult>
                 
<%@page import="cn.itcast.eitity.User"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s"%>

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title heretitle>
head>
<body>
          <s:debug>s:debug><br/><br/>
          <s:property value="user.username"/><br/>
          <s:property value="user.password"/><br/>
          <s:property value="user.address"/>
body>
html>

从值栈中获取list集合

public class ListAction extends ActionSupport{

        private List list=new ArrayList();


           public List getList() {
            return list;
        }

        @Override
        public String execute() throws Exception {
            User user1=new User();
            user1.setUsername("小明");
            user1.setPassword("123");
            user1.setAddress("华山");

            User user2=new User();
            user2.setUsername("笑话");
            user2.setPassword("321");
            user2.setAddress("衡山");

            list.add(user1);
            list.add(user2);


            return SUCCESS;
        }
}
  name="list" class="cn.itcast.eitity.ListAction">
                        <result name="success">/valuestack.jspresult>
                 
  • 第一种方式
<s:property value="list[0].username"/>
       <br/>
        <s:property value="list[0].password"/>
        <br/>
         <s:property value="list[0].address"/>
         <br/><br/>
          <s:property value="list[1].username"/>
       <br/>
        <s:property value="list[1].password"/>
        <br/>
         <s:property value="list[1].address"/>
  • 第二种方式
    • 使用struts2标签类似jstl的foreach标签 遍历值栈的list集合
    • 注意: <s:property value="username"/><br/> <s:property value="password"/><br/> <s:property value="address"/><br/><br/> s:iterator>
      • 第三种方式(常用)
      <s:iterator value=”list” var=”user”>
            遍历值栈list集合 得到每个user对象
            机制:把每次遍历出来的user对象放到context里面
            获取context里面数据特点:写ognl表达式 
      使用特殊符号 #
            <s:property value=”#user.username”/>
      s:iterator>
      <s:iterator value="list" var="user">
                      <s:property value="#user.username"/><br/>
                       <s:property value="#user.password"/><br/>
                       <s:property value="#user.address"/><br/>
                       <br/>
               s:iterator>
               <br/>

      对值栈的其他操作

      • 使用set方法向值栈放数据 获取数据
      public class ValueStackDemoAction extends ActionSupport{
      
      
             private String username;
      
                 public String getUsername() {
              return username;
                      }
      
              public String execute() throws Exception {
                  username="abcdefg";
      
                     ActionContext context=ActionContext.getContext();
      
                     ValueStack valueStack=context.getValueStack();
      
                         valueStack.set("itcast","itcast");
      
                         valueStack.push("123");
      
                        return SUCCESS;
                 }
      }
       name="valueStack" class="cn.itcast.eitity.ValueStackDemoAction">
                      <result name="success">/string.jspresult>
                      
      <%@ page language="java" contentType="text/html; charset=UTF-8"
          pageEncoding="UTF-8"%>
      <%@taglib uri="/struts-tags" prefix="s"%>
      
      <html>
      <head>
      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
      <title>Insert title heretitle>
      head>
      <body>
                 <s:debug>s:debug>
                 <br/>
                <s:property value="username"/><br/>
      
                <s:property value="itcast"/>
      
      body>
      html>

      获取值栈中的数据_第2张图片

      • 使用push方法向值栈放数据 获取
        • 使用push方法设置值 没有名称 只有设置的值
        • 向值栈放数据 把向值栈放数据存到数组里面 数组名称top

      获取值栈中的数据_第3张图片

      EL表达式获取值栈数据

       <c:forEach items="${list}" var="user">
                     ${user.username}
                     ${user.password}
                     ${user.address}
                     <br/>
               c:forEach>
      • EL表达式获取域对象值(为什么)
      • 向域对象里面放值使用setAttribute方法 获取值使用getAttribute方法
      • 底层增强request对象里面的方法getAttribute方法
        • 首先从request域获取值 如果获取到 直接返回
        • 如果从request域获取不到值 到值栈中到把值获取出来 把值放到域对象里面
      • 查看源代码
        获取值栈中的数据_第4张图片
        注意:但最好不用去EL表达式去获取值栈数据 有效率问题

你可能感兴趣的:(Struts2,JAVA,EE)