一、OGNL简介

OGNL (Object-Graph Navigation Language)的缩写,简称对象图导航语言。

OGNL表达式的特特点:

>能够取对象的属性,也能调用对象的方法。

>能访问静方法,静态属性。

>能访问值栈以及Stack Context

>能操作集合对象

>支持赋值,运算操作,字段类型转化

二、OGNL访问值栈,Stack Context和集合

1.OGNL访问值栈(Value Stack)

(1).值栈可以理解为一个存储数据的Map,其中主要存储了当前Action的实例。

(2).当struts2接收到请求后就会创建相应的Action实例来处理请求。

(3).Action会把db中读取的数据保存到Action中定义的属性中。

(4).Struts2会把这个Action保存到值栈中,以供GONL访问。

(5).Action处理完返回jsp页面信息后,可以使用<s:debug/>标签查看值栈中信息。

查看值栈中信息,需要在jsp页面中引入tablib,示例如下:

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

<s:property value="username">

2.OGNL访问Stack Context

上例用ognl访问Action中的数据,那么如何使用ognl访问request,session,Application等呢?

访问Stack Context需要加上"#"符号,如访问session中的userName如下:

<s:property value="#session.userName"/>

3.OGNL访问集合

Action中经常返回集合,那么如何访问呢?

在jsp页面中可以使用一下代码来访问集合:

(1).访问list集合下标为0的元素。

<s:property value="userList[0]"/>

(2).访问List集合的第一个元素对象的属性,如user.userName的值:

<s:property value="userList[0].userName"/>

(3).获取List集合的大小

<s:property value="userList.size()"/>

(4).获取List集合是否为空

<s:property value="userList.isEmpty()">

(5).获取map集合中key为"m1"的value

<s:property value="userMap['m1']"/>

<s:property value="userMap.m1"/>

(6).获取map的键的集合

<s:property value="userMap.keys"/>

(7).获取map的值的集合

<s:property value="userMap.values"/>

(8).获取map的值对数量

<s:property value="userMap.size()"/>

(9).获取map集合是否为空

<s:property value="userMap.isEmpty"/>

(10).获取set集合,由于set无序,所以先转化为数组

<s:property value="userSet.toArray()[0]"/>

三、Struts2标签

struts2提供的标签可分为一下几类"

1.通用标签

  (1).数据标签

  (2).控制标签

2.UI标签

3.Ajax标签

1.通用标签

(1).数据标签

使用struts2提供的标签前需要在jsp页面中引入taglib指令:

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

<s:property value="username">标签:

value:用来获取OGNL表达式的值。

default:如果属性返回值为空时候,任然输入结果。

escapeHtml:是否转义html,默认取值为true,

<s:debug/>

查看值栈和Stack Context

<s:date name="nowDate" fromat="yyyy-MM-dd">:用于格式化输出一个日期

name:被格式话的值,必须设置。

format:用于日期显示的格式:如:"yyyy-MM-dd HH:mm:ss"

<s:set var="name" value="user.userName" scope="session"/>

对设置的表达式求值,并将结果赋值给特定作用域的某个变量。

var:变量名,value:设置给变量的值,scope:变量的生存周期。

<s:url value="http://www.cnblogs.com/izhongwei" var="url"/>

用来生成一个url,主要的属性有:

var:该url名称,如果指定这个属性这url标签就不会在页面生成字符串。

action:要访问的Action名称。

value:要访问的目标,如果action不指定,就使用value作为url的地址的值。

<s:a>用来生成html的<a>标签<s:a href="${#url}">超链接</s:a>

<s:param>:为其他标签添加参数化设置

<s:url value="http://www.cnblogs.com/izhongwei" var="url">

<s:param name="str" value="accp"></s:param>

</s:url>

<s:a href="%{#url}">超链接</s:a>

生成后的html代码是:<a href="http://www.cnblogs.com/izhongwei?str="accp"">超链接</a>

<s:include>:类似与jsp的动作标签<jsp:include>

<s:include value="include.jsp"/>

(2).控制标签

<s:if>,<s:elseif>,<s:else>

<s:iterator>主要用于对集合进行循环:

1.value:被循环访问的集合

2.var:变量名称,用来引用当前循环访问的集合元素。

3.status:返回当前循环的各种信息

  count:集合含有多少个对象。

  index:正在循环这一项的索引。

  even:当前遍历到的对象是否处于列表的偶数索引位置。

  odd:当前遍历到的对象是否处于列表的奇数索引位置。

<s:iterator var="user" value="userList"  status="status">

  <s:if test="#status.even"><tr bgcolor="yellow"></s:if>

</s:iterator>

2.UI标签

struts2 UI标签可以通过设置不通的主题生成不通的风格。主题有simple,xhtml,css_xhtml,ajax;

可以在struts.xml中统一配置设置主题格式:

<constant  name="struts.ui.theme" value="simple">

<s:form>:对应html中的<form>:

属性有:name,action,method

<s:textfield>对应html中的<input type="text">单行文本框

属性:name,value,maxlength,readonly

<s:textarea>对应html中的<textarea>,即多行文本框。

属性:name,value,cols,rows,readonly

<s:submit>对应html中的<input type="submit">他的基本属性为value

<s:select>下拉框

属性:name(下拉框名称),list(生成下拉框的集合),listKey(生产下拉项的value属性)

listValue(生成下拉项显示的文字)

<s:doubleselect>:用于生成两个联动的下拉框。

3.Ajax标签

Struts2提供了一套完整的Ajax解决方案,datetimepicker日期空间标签示例

struts2进阶篇(5)的更多相关文章

  1. struts2进阶篇(2)

    一.Action与MVCstruts2是一个基于MVC的web应用框架,它将应用程序分为三个组件:模型,视图,控制器.模型:包含了应用程序的业务逻辑和业务数据,由封装数据和处理业务的javaBean组 ...

  2. struts2进阶篇(4)

    一.使用ActionContext访问Servlet API strtus2提供了一个ActionContext类,该类别称为Action上下文或者Action环境,Action可以通过该类来访问最常 ...

  3. Struts2进阶(一)运行原理及搭建步骤

    Struts2进阶(一)运行原理 Struts2框架 Struts2框架搭建步骤 致力于web服务,不可避免的涉及到编程实现部分功能.考虑使用到SSH框架中的Struts2.本篇文章只为深入理解Str ...

  4. SSH开发模式——Struts2进阶

    在之前我有写过关于struts2框架的博客,好像是写了三篇,但是之前写的内容仅仅是struts2的一些基础知识而已,struts2还有很多有趣的内容等待着我们去发掘.我准备再写几篇关于struts2的 ...

  5. Membership三步曲之进阶篇 - 深入剖析Provider Model

    Membership 三步曲之进阶篇 - 深入剖析Provider Model 本文的目标是让每一个人都知道Provider Model 是什么,并且能灵活的在自己的项目中使用它. Membershi ...

  6. idea 插件的使用 进阶篇

    CSDN 2016博客之星评选结果公布    [系列直播]零基础学习微信小程序!      "我的2016"主题征文活动   博客的神秘功能 idea 插件的使用 进阶篇(个人收集 ...

  7. 2. web前端开发分享-css,js进阶篇

    一,css进阶篇: 等css哪些事儿看了两三遍之后,需要对看过的知识综合应用,这时候需要大量的实践经验, 简单的想法:把qq首页全屏另存为jpg然后通过ps工具切图结合css转换成html,有无从下手 ...

  8. windows系统快捷操作の进阶篇

    上次介绍了windows系统上一些自带的常用快捷键,有些确实很方便,也满足了我们的一部分需求.但是我们追求效率的步伐怎会止步于此?这一次我将会进一步介绍windows上提升效率的方法. 一:运行 打开 ...

  9. python 面向对象(进阶篇)

    上一篇<Python 面向对象(初级篇)>文章介绍了面向对象基本知识: 面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用 类 是一个模板,模板中包装了多个“函数”供使 ...

随机推荐

  1. spring中@param和mybatis中@param使用差别

    spring中@param /** * 查询指定用户和企业关联有没有配置角色 * @param businessId memberId * @return */ int selectRoleCount ...

  2. javascript 设计模式之观察者模式

    观察者模式又叫发布——订阅模式,顾名思义pub——sub就是被动触发的,:不要给我......,我会给你.......就是一个发布订阅的解释,实质就是对程序中的某个对象状态进行监听观察,并且在该对象发 ...

  3. ruby 除法运算

    在Ruby中根据运算对象的值的不同进行不同的操作.除法运算符"/"的两边同为Interger对象时运算符进行整除运算,其中任意一方为Float对象时进行实数的除法运算. 7 / 2 ...

  4. ArcGIS Server注册地理数据库报machine:机器名[Oracle:(null)]错误的修改

    环境介绍:本机安装了ArcGIS Server10.2,ArcGIS Desktop10.2,64位Oracle11g以及Oracle32位客户端.直连和服务连接都能成功. 问题:我要进行服务发布的时 ...

  5. 程序设置横屏后,锁屏时会被销毁一遍,解锁时又重新加载onCreat的问题解决

    今天在写一个应用的时候,因为需要设置成横屏模式,所以在Manifest里面的Activity里面加了两个参数设置: android:screenOrientation="landscape& ...

  6. WCF安全1-开篇

    概述: WCF安全简介 1.在企业级应用中什么是“安全” 答: (1)应用能够识别用户的身份-认证Authentication (2)应用能够将用户的操作和可访问的资源限制在其允许的权限范围之内-授权 ...

  7. linux 多台 主机的免登录ssh的配置

    1.首先检查 有没有安装ssh rpm-qa | grep ssh 如果没有安装 yum install ssh 2.在每一台机器上执行  ssh-keygen -t rsa  会在root/.ssh ...

  8. Origami – 用于 Quartz 的免费的交互设计框架

    Origami 是一个为 Quartz Composer 开发的免费的工具包——由Facebook设计团队创建,让交互设计原型更加简单,不需要编程. 如今,大多数设计师通过创建静态原型来表达要实现的应 ...

  9. 在eclipse中配置python插件

    最好离线下载python的离线包.名字叫——org.python.pydev.feature-1.6.3.2010100513 此包里面有两个文件夹 features 和 plugins,分别把2包中 ...

  10. cocos2dx-3.x 导出自定义类到 lua 过程详解

    转载请注明出处:http://www.cnblogs.com/Ray1024 一.简介 最近正在学习cocos2d中的lua游戏开发,因为lua开发的热更新特性,大家开发游戏好像都会优先选择lua作为 ...