概述
一.什么是OGNL?
Object-Graph Navigation Language(对象图导航语言),是一种功能强大的表达式语言(EL)用在就是jsp中,通过简单一致的表达式语法存取对象的属性,调用对象的方法,遍历对象的结构图,实现字段类型转化等功能。
下面只是关于OGNL的简单介绍,若想学好它,请去http://commons.apache.org/proper/commons-ognl/index.html 学习
二.OGNL的基本使用
1.常量与操作符:
可以使用java的常量操作和数学运算。
注意:String常量可以使用单引号(只有超过一个字符的时候生效)或双引号。因为单个字符也用单引号。但如果需要只定义一个单个字符的String常量,我们需要转义。
例如:
< s:property value="‘account’"/>中的account就是个字符串。
< s:property value=“7+8”/> 输出的不是7+8,而是15.
2.设置数值及表达式列表
OGNL让用户可以在单条语句中执行逗号分隔的多个表达式,最后一个表达式的返回值作为整条语句的输出。
表达式foo, bar同时调用了getFoo()和getBar(),但最后返回的值是getBar()的值。(关于这个性质的意义,目前没找出正解,若有知道的小伙伴欢迎评论指教)。
3.使用OGNL访问ValueStack
在OGNL中,没有前缀代表了访问当前值栈。
比如< s:property value=“account”/> 中的value属性的值就是使用的ognl,他没有任何前缀,表示直接访问值栈,访问值栈后,会按照从栈顶到栈底的顺序寻找第一个匹配的对象,找到Action中的account属性取值。
4.使用OGNL访问ActionContext
在OGNL中可以通过符号#来访问ActionContext中除了值栈之外的各种值,例如:
#parameters:当前请求中的参数,对应request.getParameter(name)
#request:请求作用域中的属性,对应request.getAttribute(name)
#session:会话作用域中的属性,对应session.getAttribute(name)
#application:应用程序作用域的属性
#attr:按照页面,请求,会话和应用的顺序返回第一个符合条件的属性
例如:
Action文件:
HelloWorldAction.java
package cn.javass.hello.struts2impl.action;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class HelloWorldAction extends ActionSupport{
private String account;
private String password;
private String submitFlag;
public String execute() throws Exception{
this.businessExecute();
ActionContext c=ActionContext.getContext();
c.getSession().put("account", "session中的account");
c.getApplication().put("account", "application's account");
return this.SUCCESS;
}
public void businessExecute()
{
System.out.println("用户输入的参数为==="+"account="+account+"password="+password+"submitFlag="+submitFlag);
}
public String getAccount()
{
return account;
}
public void setAccount(String account)
{
this.account=account;
}
public String getPassword()
{
return password;
}
public void setPassword(String password)
{
this.password=password;
}
public String getSubmitFlag()
{
return submitFlag;
}
public void setSubmitFlag(String submitFlag)
{
this.submitFlag=submitFlag;
}
}
struts.xml配置:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
"http://struts.apache.org/dtds/struts-2.5.dtd">
<struts>
<constant name="struts.devMode" value="true"/>
<constant name="struts.locale" value="zh_CN"/>
<constant name="struts.i18n.encoding" value="UTF-8"/>
<package name="struts2" extends="struts-default" namespace='/'>
<action name="helloworldAction" class="cn.javass.hello.struts2impl.action.HelloWorldAction">
<result name="success">/Text01/welcome.jsp</result>
<interceptor-ref name="timer"/>
<interceptor-ref name="defaultStack"/>
</action>
</package>
</struts>
jsp文件:
index.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="/struts2/helloworldAction.action" method="post">
<input type="hidden" name="submitFlag" value="login"/>
Account :<input type="text" name="account"/><br/>
PassWord:<input type="password" name="password"/><br/>
<input type="submit" value="submit">
</form>
</body>
</html>
welcome.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>
<%@taglib prefix="s" uri="/struts-tags" %>
欢迎账号为<s:property value="account"/>的朋友来访<br/>
<s:property value="#application.account"/>
</body>
</html>
结果:
5.访问静态方法和静态属性
我们可以用@来访问任意类中的静态方法和静态属性,格式为:
@类的全路径名@属性名(或方法名)
具体使用方法如下:
1.在struts.xml中添加开启访问类的静态方法配置:
<constant name="struts.ognl.allowStaticMethodAccess" value="true"/>
2.编写一个类:
MyStatic.java
package cn.javass.hello.struts2impl.action;
public class MyStatic {
public static String staticTest="staticTestValue";
public static void testMethod()
{
System.out.println("static test method");
}
}
3.编写welcome.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>
<%@taglib prefix="s" uri="/struts-tags" %>
欢迎账号为<s:property value="account"/>的朋友来访<br/>
静态属性值为:<s:property value="@cn.javass.hello.struts2impl.action.MyStatic@staticTest"/>
<br/>
调用静态方法:<s:property value="@cn.javass.hello.struts2impl.action.MyStatic@testMethod()"/>
</body>
</html>
结果:
最后
以上就是虚幻板凳为你收集整理的OGNL基础学习的全部内容,希望文章能够帮你解决OGNL基础学习所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复