最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

struts2中的ognl表达式

旗下网站admin64浏览0评论

struts2中的ognl表达式

struts2中的ognl表达式

1、object graph navigation language 对象导航图语言

2、ognl和struts2没有必然的关系,它不是真正的编程语言,它只是一种数据访问语言。

3、在struts2中ognl完成数据设置,类型转换两个功能,Apache推荐使用。

4、需要的jar包  ognl-3.1.15.jar  javassist-3.20.0-GA.jar

5、ognl的思想 把数据分为两类,常用的和不常用的。(比如内存和磁盘的关系)

案例一、

创建User类

public class User {
	private String name;
	private int  age;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public User(String name, int age) {
		super();
		this.name = name;
		this.age = age;
	}
	public void setAge(int age) {
		this.age = age;
	}
}
import java.util.HashMap;
import java.util.Map;
import ognl.Ognl;
import ognl.OgnlException;
import testdemo.ognl.vo.User;
public class OgnlDemo {
	public static void main(String[] args) throws OgnlException {
		/**
		 * ognl思想 把数据分为两类  常用的和不常用的
		 */
		//不常用的数据
		Map<String ,Object> map = new HashMap<>();
		map.put("school", "重庆*******");
		map.put("address", "重庆");
		
		//常用的数据
		User user = new User("张三丰",150);
		
		
		//ognl表达式的写法  获取常用的数据  常用的数据自接获取
		//		表达式(expression) 上下文(context)   ognl表达式的根(root)
		String name = (String) Ognl.getValue("name", map,user);//User对象里面有name
		//上下文 就是大数据,不常用的数据   常用的数据放在root根 里面
		System.out.println(name);
		
		
		//ognl表达式的写法  	不常用的数据  通过#来获取
		String name2 = (String) Ognl.getValue("#school", map,user);
		System.out.println(name2);

		//在struts中是通过ognl来设值和取值的
		//在 struts2中是通过ognl来设值和取值的 Action Context作为ognl的上下文对象,ValueStack作为ognl叫的root对象。
		
	}
}

6、struts2中 对象驱动 模型驱动就是通过ognl表达式设置的,一般用EL表达式来取值,struts2官方推荐用ognl来取值。

7、在struts2 ActionContext作为ognl的上下文对象ValueStack(值栈)作为ognl的root对象。所以在struts2中我要获取域(request .....)数据要用#去获取,我要获取值栈的数据直接去获取。

8、在 struts2中使用ognl表达式获取数据需要使用 struts2的标签库,使用 struts2的标签库,需要注意页面一定是通过过滤器后才能解析suts2的标签。

案例二、

javaWeb项目

登录成功的success.sjp页面

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!-- 引入标签库 -->
<%@taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<!-- 使用EL表达式获取 -->
	登录成功:欢迎${username}<br>
	<!-- 使用ognl表达式获取   value填写ognl表达式 -->
	登录成功:欢迎<s:property value="username"/><br><!-- 值栈中存放着Action的属性对象 -->
	
	<!-- 获取我存入ActionContext的值 -->
	我存入ActionContext的值是:<s:property value="#application.address"/><br>
	
	<!-- 还可以这样 -->
	<s:property value="#parameters.username"/><br>
</body>
</html>

Action

/**
 * 属性驱动
 */
import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionContext;

public class LoginAction {
	private String username;
	private 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;
	}	
	//登录处理业务
	public String login() {
		ActionContext.getContext().getApplication().put("address", "重庆");
		System.out.println("username="+username+"\tpassword="+password);
		return Action.SUCCESS;
	}
}

struts.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
    ".3.dtd">
<struts>
	<package name="default" extends="struts-default" namespace="/">
		<action name="login" class="cn.sxt.action.LoginAction" method="login">
			<result name="success">/success.jsp</result>
		</action>
	</package>
</struts>

 

发布评论

评论列表(0)

  1. 暂无评论