OGNL的简单使用

来源:互联网 发布:阶乘java递归方法 编辑:程序博客网 时间:2024/06/10 23:30

1.什么是OGNL

OGNL是Object Graphic Navigation Language(对象图导航语言)的缩写,它是一个单独的开源项目。 Struts2框架使用OGNL作为默认的表达式语言。

2.OGNL功能

前提: OGNL是struts2整合的一个开源项目,所以在struts2中,要想使用OGNL表达式,必须使用Struts2标签库

2.1 OGNL方法的调用

jsp界面引用

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

body中

<%--OGNL表达式:它可以访问普通方法         OGNL表达式必须写在struts2的标签中        s:property它就类似于jsp的表达式,把值输出到浏览器上        value属性中的内容不再是我们看到的字符串,它是一个OGNL表达式。必须知道        如果想让他变成一个普通的字符串,在值外面套上单引号    --%>    <s:property value="OGNL-Expression"/> 这是一个OGNL表达式<br/>    <s:property value="'OGNL-Expression'"/>这是一个普通的字符串<br/>    <s:property value="'OGNL-Expression'.length()"/>使用普通字符串调用了获取长度的方法    <hr/>    <%--OGNL访问静态属性:         访问静态属性的方式:@全类名@静态属性名称    --%>    <s:property value="@java.lang.Integer@MAX_VALUE" /><br/>    <%--OGNL访问静态方法:        访问静态方法的方式:@全类名@静态方法名        struts2的框架默认是禁用静态方法调用的。我们可以通过配置开启。        struts.ognl.allowStaticMethodAccess=false把它改为true    --%>    <s:property value="@java.lang.Math@random()" />    <hr/>    <%--OGNL操作map和List --%>    <%-- 使用的是s:radio的标签,创建list集合         {}就相当于创建了一个list集合         list属性中的取值是一个OGNL表达式     --%>    <s:radio name="gender" list="{'男','女'}"></s:radio><br/>    <%--使用s:radio创建一个map         #{}表示创建一个map        10作为value给raido标签的value属性赋值        男和女作为key,显示到页面的内容    --%>    <s:radio name="gender1" list="#{'1':'男','0':'女'}" />

当访问静态方法时,需要在struts.xml中进行配置

<constant name="struts.ognl.allowStaticMethodAccess" value="true"></constant>

3.EL表达式的自定义方法

1 编写一个普通类,提供一个实现功能的静态方法

package jxust.simon.web.function;public class MyFunction {    public static String toUpperCase(String str){        return str.toUpperCase();    }}

2 在WEB-INF目录中创建一个扩展名为.tld的xml文件.文件不能放在classes和lib目录中

<?xml version="1.0" encoding="UTF-8"?><taglib xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"    version="2.0">    <tlib-version>1.0</tlib-version><!-- 指定标签库或方法库版本号 -->    <short-name>myfn</short-name><!-- 使用的短名称。对应的是taglib指令中的prefix -->    <!-- uri:把当前的方法库绑定到一个uri地址上,在该网址上不一定存在方法库 -->    <uri>http://www.baidu.com/functions/myfunction</uri>    <function><!-- 自定义方法 -->        <name>touppoercase</name><!-- 方法的名称,是jsp页面上使用的名称 -->        <!-- 指定执行的类 -->        <function-class>jxust.simon.web.function.MyFunction</function-class>        <!-- 指定执行的方法。方法名称必须和类中的方法名称保持一致            注意:当方法有参数和返回值时:参数和返回值必须写类全名(除了基本数据类型)        -->        <function-signature>java.lang.String toUpperCase( java.lang.String )</function-signature>    </function></taglib>

3 在jsp页面中使用taglib指令引入外部的标签库/方法库

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%@ taglib uri="http://www.baidu.com/functions/myfunction" prefix="myfn" %><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html>  <head>    <title>ONGL-Expression</title>  </head>  <body>    <%--EL表达式 --%>    afghdsf转成大写<br/>    ${myfn:touppoercase("afhdsf")}<br>  </body></html>
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 要求评审专家复核他不来怎么办 微博国际版不能用微博号登录怎么办 云南省特岗登录名忘了怎么办 人行登录名忘了再怎么办 生源地贷款登录名忘了怎么办 举报19楼帖子但是不给删除怎么办 新浪微博手机号被注册了怎么办 忘记新浪微博绑定的邮箱账号怎么办 申诉找回微信账号密码失败怎么办 注册微信号时验证码错误怎么办 老板让写的报道没有当天写完怎么办 洛奇英雄传镶嵌有微章的时装怎么办 上午12点用24小时制怎么办 三分钟看懂捷信个人贷款怎么办 精神不正常的父亲到单位闹怎么办 母亲和父亲一直和我闹怎么办 儿子拿了父亲的钱买手机怎么办 电动车骑的慢的时候车头打漂怎么办 二晓啊相公太爱我了怎么办全文免费 车牌被套牌了又有违章怎么办 高中生只学好主课副科学不好怎么办 母泰迪怀孕23天了不吃饭怎么办 媳妇一再触碰我的底线怎么办 发票商品编码好多选错了分类怎么办 吃了用福尔马林泡的食物怎么办 没大没小说话不尊重人的孩子怎么办 升级安卓8.0后app闪退怎么办 业主装门占用消防通道物业怎么办? 想改名字派出所不给改怎么办 物业不给地热打压影响装修怎么办 pos机pin效码验证错误怎么办 苹果下载东西要发验证码怎么办 接口断在了丝扣里面怎么办 政府下了一张关停取缔单怎么办 微信运动数据不刷新了怎么办 邻居霸占我的土地不还我该怎么办 双层水浴式杀菌锅阀门坏了怎么办 通下水管的钢丝断水管里了怎么办 塑料水管与水阀连接处漏水怎么办 介质流向标识管道温度太高怎么办 雪碧里气体太多瓶子涨得要炸怎么办