• 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>
  • 相关阅读:
    sync_with_stdio(false)和cin.tie(NULL)
    会场安排问题(贪心 两种方法)
    面向对象分析和设计笔记——第6章界面组件
    用Java实现文件复制
    面向对象分析和设计笔记——第5章输入输出
    面向对象分析和设计笔记——第4章设计模式
    常规类、抽象类和接口的对比分析
    使用for-each循环的三种情况
    StringTokenizer类
    String类的常用方法
  • 原文地址:https://www.cnblogs.com/f-s-q/p/6416854.html
Copyright © 2020-2023  润新知