1. 程式人生 > >struts2學習(7)值棧簡介與OGNL引入

struts2學習(7)值棧簡介與OGNL引入

ride tag per 集合 round del ram exception new

一、值棧簡介:

技術分享

二、OGNL引入:

技術分享

com.cy.action.HelloAction.java:

package com.cy.action;

import java.util.Map;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.util.ValueStack;

public class HelloAction extends ActionSupport{
    private
static final long serialVersionUID = 1L; @Override public String execute() throws Exception { ActionContext actionContext = ActionContext.getContext(); ValueStack valueStack = actionContext.getValueStack(); valueStack.set("name", "張三(valueStack)"); valueStack.set(
"age", 11); Map<String, Object> session = actionContext.getSession(); session.put("name", "王五(session)"); session.put("age", 13); Map<String, Object> application = actionContext.getApplication(); application.put("name", "趙六(application)"); application.put(
"age", 14); return SUCCESS; } }

struts.xml:

技術分享
<struts>
    
    <package name="manage" namespace="/" extends="struts-default">
        <action name="hello" class="com.cy.action.HelloAction">
            <result name="success">success.jsp</result>
        </action>
                    
    </package>
    
</struts>
View Code

success.jsp:

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<%
    request.setAttribute("name", "李四(request)");
    request.setAttribute("age", 12);
    
    pageContext.setAttribute("name", "小沛(page)");
    pageContext.setAttribute("age", "18");
%>
</head>
<body>
    獲取狹義上的值棧數據:<s:property value="name"/>
    <s:property value="age"/><br>    
    請求參數:<s:property value="#parameters.name"/>
    <s:property value="#parameters.age"/><br>
    request:<s:property value="#request.name"/>
    <s:property value="#request.age"/><br>
    session:<s:property value="#session.name"/>
    <s:property value="#session.age"/><br>
    application:<s:property value="#application.name"/>
    <s:property value="#application.age"/><br>
    attr取值:<s:property value="#attr.name"/>
    <s:property value="#attr.age"/><br>
</body>
</html>

測試結果:

技術分享

三、OGNL訪問復雜對象:

技術分享

四、OGNL訪問靜態屬性和靜態方法:

技術分享

com.cy.model.Student.java:

技術分享
package com.cy.model;

public class Student {
    private String name;
    private int age;
    
    public Student() {
        super();
        // TODO Auto-generated constructor stub
    }
    
    public Student(String name, int age) {
        super();
        this.name = name;
        this.age = age;
    }
    
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
}
View Code

com.cy.common.MyStatic.java:靜態屬性和靜態方法:

技術分享
package com.cy.common;

public class MyStatic {
    public static final String str = "好好學習";
    
    public static String print(){
        return "天天向上";
    }
}
View Code

com.cy.action.HelloAction.java中存入javaBean、List、Map:

技術分享
package com.cy.action;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.cy.model.Student;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.util.ValueStack;

public class HelloAction extends ActionSupport{
    private static final long serialVersionUID = 1L;
    
    private Student student;
    private List<Student> students;
    private Map<String,Student> studentMap;
    
    public Map<String, Student> getStudentMap() {
        return studentMap;
    }

    public void setStudentMap(Map<String, Student> studentMap) {
        this.studentMap = studentMap;
    }

    public List<Student> getStudents() {
        return students;
    }

    public void setStudents(List<Student> students) {
        this.students = students;
    }

    public Student getStudent() {
        return student;
    }

    public void setStudent(Student student) {
        this.student = student;
    }

    @Override
    public String execute() throws Exception {
        ActionContext actionContext = ActionContext.getContext();
        ValueStack valueStack = actionContext.getValueStack();
        valueStack.set("name", "張三(valueStack)");
        valueStack.set("age", 11);
        
        Map<String, Object> session = actionContext.getSession();
        session.put("name", "王五(session)");
        session.put("age", 13);
        
        Map<String, Object> application = actionContext.getApplication();
        application.put("name", "趙六(application)");
        application.put("age", 14);
        
        student = new Student("小八", 15);
        
        students=new ArrayList<Student>();
        students.add(new Student("老九",13));
        students.add(new Student("老十",14));
        
        studentMap=new HashMap<String,Student>();
        studentMap.put("goodStudent", new Student("學霸",20));
        studentMap.put("badStudent", new Student("學渣",19));
        
        return SUCCESS;
    }
    
}
View Code

struts.xml配置,開啟ognl允許訪問靜態方法:

<struts>
    <!-- 允許OGNL訪問靜態方法 -->
    <constant name="struts.ognl.allowStaticMethodAccess" value="true"></constant>
    
    <package name="manage" namespace="/" extends="struts-default">
        <action name="hello" class="com.cy.action.HelloAction">
            <result name="success">success.jsp</result>
        </action>
                    
    </package>
    
</struts>

success.jsp,通過ognl來取值:

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>    
    ognl訪問javaBean對象:<s:property value="student.name"/>
    <s:property value="student.age"/><br>
    ognl訪問List集合:<s:property value="students[0].name"/>
    <s:property value="students[0].age"/>
    <s:property value="students[1].name"/>
    <s:property value="students[1].age"/><br/>
    ognl訪問Map:<s:property value="studentMap[‘goodStudent‘].name"/>
    <s:property value="studentMap[‘goodStudent‘].age"/>
    <s:property value="studentMap[‘badStudent‘].name"/>
    <s:property value="studentMap[‘badStudent‘].age"/><br/>
    
    ognl訪問靜態屬性:<s:property value="@[email protected]"/><br>
    <!-- 訪問靜態方法,有些封裝好的Util工具,轉換等,就可以直接調用了 -->
    ognl訪問靜態方法:<s:property value="@[email protected]()"/>
</body>
</html>

測試:

技術分享

---------

struts2學習(7)值棧簡介與OGNL引入