struts入门三

OGNL基础语法以及与Struts框架整合 的体现

一:OGNL基础语法

  1.创建实体类

package cn.itcast.domain;
/**
* @author 作者
* @version 创建时间:2018年7月24日 上午9:51:20
* 类说明:
*/
public class User {
    private String name;
    private Integer age;
    public User() {
        
    }
    public User(String name,Integer age) {
        this.name = name;
        this.age = age;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Integer getAge() {
        return age;
    }
    public void setAge(Integer age) {
        this.age = age;
    }
    
}
User

  2.OGNL基础语法 

package cn.itcast.ognltest;

import java.util.HashMap;
import java.util.Map;

import org.junit.Test;

import cn.itcast.domain.User;
import ognl.Ognl;
import ognl.OgnlContext;
import ognl.OgnlException;

/**
 * @author 作者
 * @version 创建时间:2018年7月24日 上午9:52:17 类说明:OGNL基础语法 基础步骤: 1.创建root
 *          放置任何对象作为Root都可以 2.创建Context 核心是里面放置Map键值对 3.将root的值和Context的值放入OGNL中
 */
public class OgnlBase {
    private User userRoot = new User();
    private Map<String, User> context = new HashMap<String, User>();
    private OgnlContext oc = new OgnlContext();

    // 基本步骤
    public void test01() {
        // 1.创建root 放置任何对象作为Root都可以
        // User userRoot = new User();
        userRoot.setName("张三");
        userRoot.setAge(18);
        // 2.创建Context 核心是里面放置Map键值对
        // Map是接口不能实例化,只能使用其实现类实例化
        // Map<String,User> context = new HashMap<String,User>();
        context.put("user1", new User("李四", 19));
        context.put("user2", new User("王五", 20));
        // 3.将root的值和Context的值放入OGNL中
        // OgnlContext ognl = new OgnlContext();
        oc.setRoot(userRoot);
        oc.setValues(context);
    }

    // 基本取值
    @Test
    public void test02() throws OgnlException {
        test01();
        // 从root中取值
        String name = (String) Ognl.getValue("name", oc, oc.getRoot());
        // 从context中取值
        String name1 = (String) Ognl.getValue("#user1.name", oc, oc.getRoot());
        // 打印
        System.out.println(name);
        System.out.println(name1);
    }

    // 基本赋值
    @Test
    public void test03() throws OgnlException {
        test01();
        // 给root中赋值
        Ognl.getValue("name='八戒'", oc, oc.getRoot());
        String name = (String)Ognl.getValue("name", oc, oc.getRoot());
        // 给context中赋值
        Ognl.getValue("#user1.name = '悟空'", oc, oc.getRoot());
        String name1 = (String) Ognl.getValue("#user1.name", oc, oc.getRoot());
        // 打印
        System.out.println(name);
        System.out.println(name1);
    }
    // 调用方法
    @Test
    public void test04() throws OgnlException {
        test01();
        Ognl.getValue("setName('唐僧')", oc, oc.getRoot());
        String name = (String)Ognl.getValue("getName()", oc, oc.getRoot());
        // 调用context方法
        Ognl.getValue("#user1.setName('沙僧')", oc, oc.getRoot());
        String name1 = (String) Ognl.getValue("#user1.getName()", oc, oc.getRoot());
        // 打印
        System.out.println(name);
        System.out.println(name1);
    }

    // 调用静态方法
    @Test
    public void test05() throws OgnlException {
        test01();
        //例如调用系统自带的方法 @Java.lang.Math完整类名
        Double pi = (Double) Ognl.getValue("@java.lang.Math@PI", oc, oc.getRoot());
        System.out.println(pi);
    } 

    // 创建对象(List,Map)
    @Test
    public void test06() throws OgnlException {
        test01();
        //创建List对象
        Integer size = (Integer)Ognl.getValue("{'唐僧','悟空','八戒','沙僧'}.size()", oc, oc.getRoot());
        String name = (String)Ognl.getValue("{'唐僧','悟空','八戒','沙僧'}[0]", oc, oc.getRoot());
        String name1 = (String)Ognl.getValue("{'唐僧','悟空','八戒','沙僧'}.get(1)", oc, oc.getRoot());
        System.out.println(size);
        System.out.println(name);
        System.out.println(name1);
        //创建Map对象
        Integer size1 = (Integer)Ognl.getValue("#{'name':'tom','age':20,'adress':'秦皇岛'}.size()", oc, oc.getRoot());
        String name2 = (String)Ognl.getValue("#{'name':'tom','age':20,'adress':'秦皇岛'}['name']", oc, oc.getRoot());
        Integer age = (Integer)Ognl.getValue("#{'name':'tom','age':20,'adress':'秦皇岛'}.get('age')", oc, oc.getRoot());
        String adress = (String)Ognl.getValue("#{'name':'tom','age':20,'adress':'秦皇岛'}.get('adress')", oc, oc.getRoot());
        System.out.println(size1);
        System.out.println(name2);
        System.out.println(age);
        System.out.println(adress);
    }
}
OGNL基础语法

二:OGNL与Struts框架整合

  1..导包

  2.配置struts文件

  3.配置web.xml

  4.书写action

package cn.itcast.ognltest;
/**
* @author 作者
* @version 创建时间:2018年7月24日 下午5:15:29
* 类说明:
*/

import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;

import cn.itcast.domain.User;

public class StrutsOgnlAction extends ActionSupport implements ModelDriven<User>{
    private User user = new User();
    
    @Override
    public String execute() throws Exception {
        // TODO Auto-generated method stub
        System.out.println(user);
        return super.execute();
    }

    @Override
    public User getModel() {
        // TODO Auto-generated method stub
        return user;
    }
}
接受参数

  5.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!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>
    <form action="${pageContext.request.contextPath}/StrutsOgnlAction" method="post">
    用户名:<input type="text" name="name"/>
    <input type="submit" value="提交" />
    </form>
</body>
</html>
jsp
原文地址:https://www.cnblogs.com/chiwang/p/9361480.html