OGNL表达式

1.什么是OGNL

   OGNL:Object Graphic Navigation Language(对象图导航语言)

              它是Struts2中默认的表达式语言。使用表达式需要借助Struts2的标签.

   OGNL与EL的区别:

              EL/JSTL 数学运算等等表达式: 都有一个明确的返回值,都只能取值。

     OGNL表达式: 它不仅可以取值,还可以赋值(赋值操作只能由Struts来完成)

   OGNL表达式的写法:   属性.属性.属性的方式   <input type="text" name="user.user"/>

   OGNL表达式的基本使用:

  •    使用s:property标签输出内容
  •    访问普通方法
  •    访问静态方法
  •    访问静态属性
  •    操作集合(List AND Map)
<title>Struts2OGNL表达式的基本使用</title>
</head>
<body>
    <!-- a、使用s:property标签输出内容:要想输出内容到页面得使用Struts2的标签库 
            value属性:把value取值所对应的内容输出到页面
            若想直接输出文本,则需要用引号引起来。
    -->
    输出基本内容:<s:property value="'OGNLExpresession'"/>    
    <hr/>
    <!-- b、访问普通方法     -->
    输出字符串的长度:<s:property value="'OGNLExpresession'.length()"/>    <br/>
    输出转大写字符:<s:property value="'OGNLExpresession'.toUpperCase()"/>    <br/>
    切割字符串:<s:property value="'OGNLExpresession'.split('L')"/>    
    <hr/>
    <!-- c、访问静态属性 
        语法 :
            @类的全路径@静态字段
        -->
    输出整数的最大值:<s:property value="@java.lang.Integer@MAX_VALUE"/>
    <hr/>
    <!-- d、访问静态方法
        语法:
            @类的全路径@静态方法
        注意:
            使用静态方法时,需要在struts.xml中开启静态方法调用的开关。
     -->
    输出一个随机数:<s:property value="@java.lang.Math@random()"/>    
    <hr/>
    <!-- e、操作集合(List和Map)
        语法:
            声明list集合:{"aa","bb"}
            声明map集合:#{"key":"value","key":"value"}
         -->
    输出html普通标签的单选按钮:<br/>
    <input type="radio" name="sex" value="男"/><input type="radio" name="sex" value="女"/><br/>
    使用Struts2标签输出单选按钮:list集合方式<br/>
    <s:radio list="{'男','女'}" name="sex"></s:radio><br/>
    使用Struts2标签输出单选按钮:map方式<br/>
    <s:radio list="#{'男':'男','女':'女' }" name="sex"/>
    
    
    
</body>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
 <%@ taglib uri="/struts-tags" prefix="s" %>
<!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>
    使用EL表达式:<br/>
    ${c.username}<br/>
    ${requestScope.p }<br/>
    ${sessionScope.p }<br/>
    ${applicationScope.p }<br/>
    <hr/>
    使用OGNL表达式:<br/>
    <!-- 如果是在action动作类中直接声明的变量,OGNL直接取值即可。 -->
    <!-- 在域对象中的数据需要使用#开头 -->
    <!-- 
        注:如果对象在action动作类中直接声明,则取值需要使用c.username
              如果对象在方法中手动添加到valueStack对象中,则取值不需要c.username,直接username即可。
     -->
    <s:property value="c.username"/><br/>
    <%-- <s:property value="[1].username"/><br/> --%>
    <s:property value="#request.p"/><br/>
    <s:property value="#session.p"/><br/>
    <s:property value="#application.p"/><br/>
    <s:property value="#attr.p"/><br/>
    <hr/>
    <!-- 不写value属性:获得的是栈顶数据 -->
    <s:property/>
    <s:debug/>
</body>
</html>
<%@page import="com.opensymphony.xwork2.util.ValueStack"%>
<%@page import="com.opensymphony.xwork2.ActionContext"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s" %>
<!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>
<!-- 在页面查看调试信息 -->
${ username}<br/>
    <s:debug/>
    <s:property value="username"/><br/> == vs.findValue("username");
    <s:property value="[1].username"/><br/>
    <s:property value="#session.p"/><br/>
    <s:property value="#application.p"/>
    <hr/>
    <%
        
        ActionContext ac = ActionContext.getContext();
        ValueStack vs  = ac.getValueStack();
        String name = (String)vs.findValue("username");
        out.print(name);
        String p = (String)vs.findValue("#session.p");
        out.print(p);
    %>
</body>
</html>

 

posted @ 2017-02-19 20:14  java_Word  阅读(2519)  评论(0编辑  收藏  举报