struts2中的值栈

 

1.向值栈中放数据

             1. 向值栈放数据的多种方式

                     第一种:获取值栈对象,调用值栈对象里面的set方法

public class ValueStackDemo1Action extends ActionSupport {
    @Override
    public String execute() throws Exception {
    	//1.获取值栈对象
    	ActionContext context = ActionContext.getContext();
    	ValueStack stack = context.getValueStack();
    	//2.调用set方法
    	stack.set("username", "zzu");
    	return "success";
    }
}

                     第二种:获取值栈对象,调用值栈对象里面的push方法

public class ValueStackDemo1Action extends ActionSupport {
    @Override
    public String execute() throws Exception {
    	//1.获取值栈对象
    	ActionContext context = ActionContext.getContext();
    	ValueStack stack = context.getValueStack();
        //3.调用push方法
    	stack.push("abcd");
    	return "success";
    }
}

                     第三种:在action定义变量,生成变量的get方法(数据直接在action种存储,减少内存的开辟)

public class ValueStackDemo1Action extends ActionSupport {
    //1.定义一个变量
	private String name;
	//2.生成一个get方法
	public String getName() {
		return name;
	}

	@Override
    public String execute() throws Exception {
    	//3.在具体的方法里面给属性设置值
		name="abcd";
    	return "success";
    }
}

         2.向值栈种放对象

                 步骤:

                         (1)定义一个成员对象

                         (2)生成对象的get方法

                           (3)在具体执行的方法里面向对象中设置值

public class ObjectDemoAction extends ActionSupport {
    //1.定义一个对象
	private User user=new User();
	//2.get方法
	public User getUser() {
		return user;
	}
	@Override
    public String execute() throws Exception {
    //放具体的数据
		user.setUsername("lucy");
		user.setPassword("12300");
		user.setAddress("china");
    	return "success";
    }
}

           3.向值栈中放list集合

                     步骤:

                             (1)定义一个成员集合变量

                               (2)生成集合的get方法

                               (3)在具体的方法里面向list集合中放置值

public class ListDemoAction extends ActionSupport {
    //1.定义一个list
	private List<User> list=new ArrayList<>();
	//2.生成get方法
	public List<User> getList() {
		return list;
	}
	@Override
    public String execute() throws Exception {
    //3.放具体的数据
     User user1=new User();
     user1.setUsername("小米");
     user1.setPassword("123");
     user1.setAddress("日本");
     User user2=new User();
     user1.setUsername("小马");
     user1.setPassword("133");
     user1.setAddress("美国");
     list.add(user1);
     list.add(user2);
    	return "success";
    }
}

2.从值栈中获取数据

           使用struts2标签和OGNL表达式来获取数据

                1.获取字符串

public class ValueStackAction extends ActionSupport {
  private String username;
  
	public String getUsername() {
	return username;
}
	@Override
public String execute() throws Exception {
	username="zzu";
	return "success";
}
}
<title>Insert title here</title>
</head>
<body>
  <s:debug></s:debug>
  <!-- 先获取字符串的值 -->
  <s:property value="username"/>
</body>
</html>

              2.获取对象

<!-- 获取值栈对象的值 -->
  <s:property value="user.username"/>
  <s:property value="user.password"/>
  <s:property value="user.address"/>
	private User user=new User();
	

	public User getUser() {
		return user;
	}


	@Override
public String execute() throws Exception {
	//username="zzu";
		user.setUsername("xx");
		user.setPassword("1230");
		user.setAddress("china");
	return "success";
}
}

         3.获取list集合中的数据

  <!-- 获取list中的数据 -->
  <!-- 第一种  太固定了-->
  <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"/>

   <!-- 第二种 使用struts2标签类似于jstl的foreach标签
       s:iterator遍历值栈的list集合
    -->
     <s:iterator value="list">
        <s:property value="username"/>
        <s:property value="password"/>
        <s:property value="address"/>
     </s:iterator>
   <!-- 第三种 -->
     <s:iterator value="list" var="user">
         <s:property value="#user.username"/>
         <s:property value="#user.password"/>
         <s:property value="#user.address"/>
     </s:iterator>

     4.其他的操作

            1.使用set方法向值栈中放数据的值获取

 <!-- 获取set方法获取值 ,根据名称获取值 
        value的值是set放置的key
     -->
     <s:property value="username"/>

        2.使用push方法放置的值获取的方法

             (1)使用push方法设置的值,没有名称,只有设置的值

              (2)向值栈放数据,把向值栈放数据存到数组里面,数组名称为top

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

3.EL表达式获取值栈数据(why)

     1.EL表达式获取域对象值

      2。向域对象设置值使用setAttribute方法,获取使用getAttribute

     3.底层增强request对象里面的方法getAttribute方法

               (1)首先从request域里面获取值,如果获取到,直接返回

                 (2)如果从request域对象娶不到之,到值栈里面把值取出来放到域对象里面

4.OGNL的#和%的使用

         #的使用

                1.使用#获取context里面的数据

                        (1)向request域放值

                          (2)在页面使用ognl获取

<body>
     <s:property value="#request.req"/>
</body>
public class ContextAction extends ActionSupport {


	@Override
    public String execute() throws Exception {
       HttpServletRequest request = ServletActionContext.getRequest();
       request.setAttribute("req", "reqvalue");
    	return "success";
    }
}

            %的使用

                     1.在struts2标签中表单标签

                            (1)在struts2标签里面使用ognl表达式,如果直接在struts2表单标签里面使用ognl表达式不识别,只有使用%之后才会识别

<!-- 普通输入项 -->
     <s:textfield name="username" value="%{#request.req}"></s:textfield>

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值