1. 程式人生 > >使用ognl訪問struts2的值棧 ognlValueStack

使用ognl訪問struts2的值棧 ognlValueStack

前言:使用ognl和struts2標籤庫的時候要在 jsp頁面 中 加入這麼一行 

<%@ taglib uri="/struts-tags" prefix="s" %>

struts(統一格式):

        <action name="ognl" class="com.demo.test1.OnglAction" method="ognl1">
            <result name="ognl1" >/OnglPage.jsp</result>
        </action>

User(統一用一個User):

public class User {
    String username;
    String password;
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    
}

===============================================================================================================================================================

一、直接向值棧中存放資料

action:

    /**
     * 一、直接以鍵值對的形式設定(建立)值棧stack
     * @return
     */
    public String ognl1(){
        ValueStack stack = ActionContext.getContext().getValueStack();
        stack.set("username", "name1");//建立一個值棧的key
        stack.setValue("username", "name2");//對已有的值棧的value進行修改
        return "ognl1";
    }

jsp:

 直接以鍵值對的形式設定(建立)值棧stack:<br>
    <s:property value="username"/> <br>

就可以在jsp頁面中看到  name2

================================================================================================================================================================

二、向值棧中存放物件

action:

    /**
     * 二、儲存物件
     *     1、宣告user
     *     2、建立getUser方法
     *     3、設定user例項的屬性值
     * 建立user例項的時候就已經放進了值棧中
     */
    User user;
    public User getUser() {
        return user;
    }
    public String ognl2(){
        user=new User();
        user.setUsername("張三");
        user.setPassword("123456");
        return "ognl2";
    }

jsp:

    向值棧中存放物件並顯示:<br>
    <s:property value="user.username"/><br>
    <s:property value="user.password"/>

================================================================================================================================================================

三、值棧中存放list集合

action:

    /**
     * 三、值棧中存放list集合
     */
    //獲得user和list例項
    User user1=new User();
    User user2=new User();
    User user3=new User();
    ArrayList<User> list=new ArrayList<User>();
    //獲得get方法
    public User getUser1() {
        return user1;
    }
    public User getUser2() {
        return user2;
    }
    public User getUser3() {
        return user3;
    }
    public ArrayList<User> getList() {
        return list;
    }
    public String ognl3(){
        //設定user的值
        user1.setUsername("name1");
        user1.setPassword("pwd1");
        user2.setUsername("name2");
        user2.setPassword("pwd2");
        user3.setUsername("name3");
        user3.setPassword("pwd3");
        //user加入list集合
        list.add(user1);
        list.add(user2);
        list.add(user3);
        return "ognl3";
    }

jsp:

  向值棧中存放list:<br>
  <s:property value="list[0].username"/><br>
  <s:property value="list[0].password"/><br>
  list遍歷list取值<!-- 遍歷list方式取值 -->
  <s:iterator value="list" >
      <s:property value="username"/>
      <s:property value="password"/><br>
  </s:iterator>

%使用

1 在struts2標籤中表單標籤

(1)在struts2標籤裡面使用ognl表示式,如果直接在struts2表單標籤裡面使用ognl表示式不識別,只有%之後才會識別。