频道栏目
首页 > 程序开发 > 软件开发 > Java > 正文
java struts2入门学习--OGNL语言常用符号和常用标签学习
2014-02-19 08:54:30      个评论      
收藏   我要投稿
一.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" "https://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>

 

 

 

 

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" "https://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" "https://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" "https://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" "https://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" "https://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>

点击复制链接 与好友分享!回本站首页
上一篇:字典序问题的解决方案
下一篇:Java Filter过滤器的简单总结
相关文章
图文推荐
点击排行

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站