• java struts2入门学习--OGNL语言常用符号和常用标签学习


    一.OGNL常用符号(接上一篇文章):

    1.#号

    1)<s:property value="#request.username"/> 作用于struts2的域对象,而不是普通域对象

    2)<s:property value="#user.username"/>作用于JavaBean对象

    3)<s:property value="#username"/>作用于普通字符串,如果value只是一个字符串的话,不是JavaBean对象,可以加#,也可以不加.

    4) ?#,表示所有记录

      ^#,表示第一条记录

      $#,表示最后一条记录

      {?#条件}[n],表示第n+1条记录,

    例如:<s:iterator var="user" value="#attr.userList.{$#this.age>=22}">

    <s:iterator var="user" value="#attr.userList.{?#this.age>=22}[1]">
    取出第N个记录,N为索引号

    实例:ognl_3.jsp

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <%@ taglib uri="/struts-tags" prefix="s"%>
    <%@ page import="java.util.*"%>
    <%@ page import="ognl.User"%>
    <!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>
        <%
            List<User> userList = new ArrayList<User>();
            userList.add(new User(1, "张三", 20));
            userList.add(new User(2, "李四", 25));
            userList.add(new User(3, "amos", 30));
            userList.add(new User(4, "hi_amos", 28));
            pageContext.setAttribute("userList", userList);
        %>
        <hr>
        <table border="1" align="center" width="50%">
            <caption><font color="blue">查询大于等于25岁的所有用户,?#</font></caption>
            <tr>
                <th>编号</th>
                <th>姓名</th>
                <th>年龄</th>
            </tr>
            <!-- {条件},{}中存放条件;this表示该个对象或该条数据;?表示全部符合条件的数据;^表示查询符合条件的第一个数据-->
            <s:iterator var="user" value="#attr.userList.{?#this.age>=25}">
                <tr>
                    <td><s:property value="#user.id" /></td>
                    <td><s:property value="#user.name" /></td>
                    <td><s:property value="#user.age" /></td>
                </tr>
            </s:iterator>
        </table>
        <br><hr><br>
        <table border="1" align="center" width="50%">
            <caption><font color="blue">查询大于等于25岁的第一个用户,^#</font></caption>
            <tr>
                <th>编号</th>
                <th>姓名</th>
                <th>年龄</th>
            </tr>
            <!-- {条件},{}中存放条件;this表示该个对象或该条数据;?表示全部符合条件的数据;^表示查询符合条件的第一个数据-->
            <s:iterator var="user" value="#attr.userList.{^#this.age>=25}">
                <tr>
                    <td><s:property value="#user.id" /></td>
                    <td><s:property value="#user.name" /></td>
                    <td><s:property value="#user.age" /></td>
                </tr>
            </s:iterator>
        </table>
            <br><hr><br>
        <table border="1" align="center" width="50%">
            <caption><font color="blue">查询大于等于25岁的最后一个用户,$#</font></caption>
            <tr>
                <th>编号</th>
                <th>姓名</th>
                <th>年龄</th>
            </tr>
            <!-- {条件},{}中存放条件;this表示该个对象或该条数据;?表示全部符合条件的数据;^表示查询符合条件的第一个数据-->
            <s:iterator var="user" value="#attr.userList.{$#this.age>=25}">
                <tr>
                    <td><s:property value="#user.id" /></td>
                    <td><s:property value="#user.name" /></td>
                    <td><s:property value="#user.age" /></td>
                </tr>
            </s:iterator>
        </table>
                <br><hr><br>
        <table border="1" align="center" width="50%">
            <caption><font color="blue">查询大于等于25岁的最后一个用户,{?#}[索引值]</font></caption>
            <tr>
                <th>编号</th>
                <th>姓名</th>
                <th>年龄</th>
            </tr>
            <!-- {条件},{}中存放条件;this表示该个对象或该条数据;?表示全部符合条件的数据;^表示查询符合条件的第一个数据-->
            <s:iterator var="user" value="#attr.userList.{?#this.age>=25}[1]">
                <tr>
                    <td><s:property value="#user.id" /></td>
                    <td><s:property value="#user.name" /></td>
                    <td><s:property value="#user.age" /></td>
                </tr>
            </s:iterator>
        </table>
    </body>
    </html>
    View Code

    效果如下图所示:

    5)可以构造Map集合

    实例:ognl_4.jsp

    <%@ 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>
        <!-- 能过#号构造Map集合 -->
        <s:iterator var="" value="#{'male':'男','female':'女' }">
            <br>
            <s:property value="key"/>
            :
            <s:property value="value"/>
        </s:iterator>
    </body>
    </html>

    效果如下图所示:

     2.%号

    用法一:引用变量
    <s:textfield label="%{#request.usernameTip}" name="username"/>

    用法二:引用常量
    <s:textfield label="%{'#request.usernameTip'}" name="username"/>

    实例:ognl_5.jsp

    <%@ 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>
        传统:<s:textfield label="用户名" name="username"/><br><hr>
        现代:<s:textfield label="%{#request.usernameTip}" name="username"/><br><hr>
        现代2:<s:textfield label="%{'#request.usernameTip'}" name="username"/>
    </body>
    </html>

    效果如下图所示:

      

    3.$号

    用法一:
    >>读取xml文件中配置的变量

    用法二:

    >>读取Action类中的实例变量,底层执行getXxxx()方法

    二.OGNL常用标签

     1.property标签,用于输出指定值:

    <s:property value=“#name" default="a default value" />

    * default:可选属性, 如果需要输出的属性值为null,则显示该属性指定的值
    * escape:可选属性,指定是否格式化HTML代码。
    * value: 可选属性,指定需要输出的属性值,如果没有指定该属性,则默认输
    出ValueStack栈顶的值。

    例子 :
    <s:property/>:输出栈顶的值
    输出: username=username_valueStack, msgxx=msg_valueStack
    <s:property value="%{'<hr> hr的使用'}" escape="false" />
    输出:<hr> hr的使用
    注:escape=“false”时,hr作为html标签使用

    实例:s_property.jsp

    <%@ 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>
    <%
        session.setAttribute("user_name", "hi_amos");
        request.setAttribute("msg", "<a href='#'>超链接</a>");    
    %>
    <s:property value="#session.user_name" default="查无此值"/><br>
    <s:property value="#attr.user_name" default="查无此值"/><br>
    <s:property value="#attr.user_fname" default="查无此值"/><br>
    <!-- 是否将html转义 -->
    <s:property value="#attr.msg" default="查无此值" escape="true"/> <br>
    <s:property value="#attr.msg" default="查无此值" escape="false"/> <br>
    </body>
    </html>

    效果如下图所示:

    2. set标签

    set标签用于将某个值放入指定范围。
    var:变量的名字,name,id和var表达的含义是一样的,name,id被var替代
    scope:指定变量被放置的范围,该属性可以接受application、session、request、 page。如果没有设置该属性,则默认放置在action中,即值栈。
    value:赋给变量的值.如果没有设置该属性,则将ValueStack栈顶的值赋给变量。

     例子: 

    <s:set value="#request.username" var="xxx“ scope=“request” /><br>
    <s:property value=“#request.xxx" /><br>


    <s:set value="#request.username" var="xxx" scope="page" /><br>
    <s:property value="#attr.xxx" /><br>

    <s:set value="#request.username" var="xxx" /><br>
    <s:property value="xxx" /><br>

    实例:

    s_set.jsp

    <%@ 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>
        <%
            request.setAttribute("username", "hi_amos");
        %>
        <font color="green">application、session、request、 page</font>
        <br>
        <s:set var="name" value="#request.username" scope="session" />
        <s:property value="#session.name" />
        <br>
        <!-- 设置域为application -->
        <s:set var="name2" value="#request.username" scope="application" />
        <s:property value="#application.name2" />
        <br>
        <!-- 不写scope表示默认从值栈中取值的. -->
        <s:set var="name3" value="#request.username" />
        <s:property value="#name3" />
        <br>
    </body>
    </html>

    效果如下图所示:

     3.Iterator标签

    Iterator:标签用于对集合进行迭代,这里的集合包含List、Set,Map和数组。
    value:可选属性,指定被迭代的集合,如果没有设置该属性,则使用ValueStack栈顶的集合。
    var: 可选属性,引用变量的名称.
    status:可选属性,该属性指定迭代时的IteratorStatus实例。该实例包含如下几个方法:
    int getCount(),返回当前迭代了几个元素。
    int getIndex(),返回当前迭代元素的索引。
    boolean isEven(),返回当前被迭代元素的索引是否是偶数
    boolean isOdd(),返回当前被迭代元素的索引是否是奇数
    boolean isFirst(),返回当前被迭代元素是否是第一个元素。
    boolean isLast(),返回当前被迭代元素是否是最后一个元素。

    实例:

    s_iterator.jsp

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <%@ taglib uri="/struts-tags" prefix="s"%>
    <%@ page import="java.util.*"%>
    <%@ page import="ognl.*"%>
    <!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>标签学习</title>
    </head>
    <body>
        <%
            List<String> usersList = new ArrayList<String>();
            usersList.add("张一");
            usersList.add("张二");
            usersList.add("张三");
            usersList.add("张四");
            pageContext.setAttribute("usersList", usersList);
        %>
        <hr>
        <table border="1" width="80%" align="center">
            <tr>
                <th>索引号</th>
                <th>编号</th>
                <th>姓名</th>
                <th>是否奇数行</th>
                <th>是否偶数行</th>
                <th>是否第一行</th>
                <th>是否最后一行</th>
                <th>状态</th>
            </tr>
            <s:iterator var="user" value="#attr.usersList" status="userstatus">
                <%-- <tr style='color:<s:property value="#userstatus.odd?'red':'blue'"/>'> --%>
                <tr
                    style='background-color:<s:property value="#userstatus.odd?'grey':'green'"/>'>
                    <td><s:property value="#userstatus.index" /></td>
                    <td><s:property value="#userstatus.count" /></td>
                    <td><s:property value="#user" /></td>
                    <td><s:property value="#userstatus.even" /></td>
                    <td><s:property value="#userstatus.odd" /></td>
                    <td><s:property value="#userstatus.first" /></td>
                    <td><s:property value="#userstatus.last" /></td>
                    <td><s:if test="#userstatus.count==1">A</s:if> <s:elseif
                            test="#userstatus.count==2">B</s:elseif> <s:elseif
                            test="#userstatus.count==3">C</s:elseif> <s:elseif
                            test="#userstatus.count==4">D</s:elseif></td>
                </tr>
            </s:iterator>
        </table>
    </body>
    </html>

    效果如下图所示:

    4.ognl操作集合

    1)使用ognl操作list和数组.

    Action中:
    private List allList=new ArrayList();
    Jsp:
    集合的长度:<s:property value="allList.size"/>

    ognl也可直接创建集合对象. 利用下拉列表框:

    Jsp:
    <s:iterator value="{1,2,3,4}">
    <s:property/> <br>
    </s:iterator>

    <s:iterator value="{'s1','s2','s3','s4'}" var="s">
    <s:property value="#s"/> <br>
    </s:iterator>

    实例:ognl_6.jsp

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <%@ page import="java.util.*" %>
    <%@ 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>对于集合的操作,判断是否非空,长度等</title>
    </head>
    <body>
        <%
            List<String> userList = new ArrayList<String>();
            userList.add("hi");
            userList.add("amos");
            userList.add("li");
            application.setAttribute("userList",userList);
        %>
        集合长度:
        <s:property value="#application.userList.size" />
        <br>
        是否为空:
        <s:property value="#application.userList.isEmpty"/>
        <hr>
        <s:iterator var="letters" value='{"A","V","I"}'>
        <s:property value="#letters"/><br>
        </s:iterator>
    </body>
    </html>

    效果如下图所示:

    2)使用ognl操作map 

    ognl用多种方式使用#号,每种是不同的.动态map对于动态单选按扭组很有用.
    创建map与创建list语法很相似,不同的是map前需要加"#"号.

    5.<s:token />标签防止重复提交

    <s:token />标签防止重复提交,用法如下:
    第一步:在表单中加入<s:token />,第二步,使用token栏截器

    例子可以参见上篇文章.

    6.使用 native2ascii 程序转换字符编码

    JDK 中提供了一个 native2ascii 工具程序,它可以将某种本地字符集编码的字符转换成 Unicode 转义序列的形式
    DOS 下进入 test_cn_backup.properties文件所在目录,运行下面的命令后将在当前目录下生成一个名为 test_zh_CN.properites 文件:
    native2ascii -encoding gb2312 源文件 目标文件.properites
    native2ascii -encoding gbk a.txt   b.properites 

    效果如下图所示:

     7.本文源码

    常用符号和常用标签学习

  • 相关阅读:
    三:oracle练习
    二:SQL 函数
    一:SQL基本语法
    生产者与消费者模式(理解) 进程间通信之消息队列编程
    C语言
    前端面试:基础javascript篇(二)
    Koa入门和源码分析
    前端面试:基础javascript篇(一)
    前端面试题(二)
    C复习
  • 原文地址:https://www.cnblogs.com/amosli/p/3553552.html
Copyright © 2020-2023  润新知