一、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源码追踪2——xml解析入口

    解析xml节点入口 org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.doRegisterBeanDe ...

  2. 一张Windows版本发展图——纪念XP服役13你年

    88年的人,接触PC十几年.第一次真正开始学习PC是在小学四年级的电脑兴趣班上,那时候好多事情还历历在目.那些年,神秘的DOS,向里面输入一些自己都不懂得命令,出现的场景让一个少年内心砰砰直跳.一个& ...

  3. [论文笔记] Legacy Application Migration to the Cloud: Practicability and Methodology (SERVICES, 2012)

    Quang Hieu Vu, Rasool Asal: Legacy Application Migration to the Cloud: Practicability and Methodolog ...

  4. SQLServer创建维护计划失败 错误c001f011

    重新注册dts.dll文件,在运行里输入命令:(x64)regsvr32 "C:\Program Files\Microsoft SQL Server\100\DTS\Binn\dts.dl ...

  5. Approvals for EBS 1.4 Now Available

    If you haven't been following the excellent Workflow blog, you might have missed the announcement ab ...

  6. 基于html5页面滚动背景图片动画效果

    基于html5页面滚动背景图片动画效果是一款带索引按钮的页面滚动动画特效代码.效果图如下: 在线预览   源码下载 实现的代码. html代码: <div id="fullpage&q ...

  7. 【转】在web 项目使用了ReportViewer时出错

    ”应用程序中的服务器错误. -------------------------------------------------------------------------------- 分析器错误 ...

  8. [Git] Git 常用技巧

    版本对比 1. 对比两个 COMMIT git diff <commit> <commit> 2. 对比 COMMIT 和父 COMMIT git diff <commi ...

  9. Linux下grep显示前后几行信息

    Linux下grep显示前后几行信息 标准unix/linux下的grep通过下面參数控制上下文 grep -C 5 foo file 显示file文件里匹配foo字串那行以及上下5行grep -B ...

  10. ECMAScript 6中的数组操作方法

    本文介绍ECMAScript 6即将带给我们新的数组操作方法,以及在怎样在现有浏览器应用这些新的数组特性. Note: 我将使用交替使用构造器(constructor)和类(class)两个术语. 类 ...