struts2进阶篇(5)
一、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)的更多相关文章
- struts2进阶篇(2)
一.Action与MVCstruts2是一个基于MVC的web应用框架,它将应用程序分为三个组件:模型,视图,控制器.模型:包含了应用程序的业务逻辑和业务数据,由封装数据和处理业务的javaBean组 ...
- struts2进阶篇(4)
一.使用ActionContext访问Servlet API strtus2提供了一个ActionContext类,该类别称为Action上下文或者Action环境,Action可以通过该类来访问最常 ...
- Struts2进阶(一)运行原理及搭建步骤
Struts2进阶(一)运行原理 Struts2框架 Struts2框架搭建步骤 致力于web服务,不可避免的涉及到编程实现部分功能.考虑使用到SSH框架中的Struts2.本篇文章只为深入理解Str ...
- SSH开发模式——Struts2进阶
在之前我有写过关于struts2框架的博客,好像是写了三篇,但是之前写的内容仅仅是struts2的一些基础知识而已,struts2还有很多有趣的内容等待着我们去发掘.我准备再写几篇关于struts2的 ...
- Membership三步曲之进阶篇 - 深入剖析Provider Model
Membership 三步曲之进阶篇 - 深入剖析Provider Model 本文的目标是让每一个人都知道Provider Model 是什么,并且能灵活的在自己的项目中使用它. Membershi ...
- idea 插件的使用 进阶篇
CSDN 2016博客之星评选结果公布 [系列直播]零基础学习微信小程序! "我的2016"主题征文活动 博客的神秘功能 idea 插件的使用 进阶篇(个人收集 ...
- 2. web前端开发分享-css,js进阶篇
一,css进阶篇: 等css哪些事儿看了两三遍之后,需要对看过的知识综合应用,这时候需要大量的实践经验, 简单的想法:把qq首页全屏另存为jpg然后通过ps工具切图结合css转换成html,有无从下手 ...
- windows系统快捷操作の进阶篇
上次介绍了windows系统上一些自带的常用快捷键,有些确实很方便,也满足了我们的一部分需求.但是我们追求效率的步伐怎会止步于此?这一次我将会进一步介绍windows上提升效率的方法. 一:运行 打开 ...
- python 面向对象(进阶篇)
上一篇<Python 面向对象(初级篇)>文章介绍了面向对象基本知识: 面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用 类 是一个模板,模板中包装了多个“函数”供使 ...
随机推荐
- ASP.NET MVC应用require.js实践
这里有更好的阅读体验和及时的更新:http://pchou.info/javascript/asp.net/2013/11/10/527f6ec41d6ad.html Require.js是一个支持j ...
- Xcode报错:“Your build settings specify a provisioning profile with the UUID..... however, no such provisioning profile was found”
运行环境: Xcode5 & 5.0及以上版本 对工程进行Archive打包的时候出现如下错误 问题描述: Code Sign error: No matching provisionin ...
- web app变革之rem(手机屏幕实现全适配)
以往web移动适配,常规写法是:media only screen @media only screen and (min-device-width: 320px){ //针对iPhone 3 } @ ...
- 如何在wp8 中调试cocos2dx c++ 代码
有的时候在win32上运行良好的cocos2dx程序移植到wp8的时候就出了问题,我们想把断点放到c++代码中,需要设置一下VS 2012 右击项目属性 把ui任务 设置为仅限本机 即可.
- 『Golang』跨平台TUI(基于文字的用户界面)库Terbox-Go文档翻译
原文 package termbox import "github.com/nsf/termbox-go" termbox-go 是一个用于创建跨平台TUI(基于文本的用户界面)的 ...
- MyEclipse从数据库反向生成实体类之Hibernate方式 反向工程
前文: hibernate带给我们的O/RMapping思想是很正确的,即从面相对象的角度来设计工程中的实体对象,建立pojo,然后在编写hbm.xml映射文件来生成数据表.但是在实际开发中,往往我们 ...
- CDN 和 DNS
原文地址:http://www.cnblogs.com/xitang/p/3575255.html 相信有很多的朋友会被这几个名词绕的有些头大,很多朋友觉得智能DNS跟双线加速.CDN加速是类似的技术 ...
- 从头学Qt Quick(3)-- 用QML写一个简单的颜色选择器
先看一下效果图: 实现功能:点击不同的色块可以改变文字的颜色. 实现步骤: 一.创建一个默认的Qt Quick工程: 二.添加文件Cell.qml 这一步主要是为了实现一个自定义的组件,这个组件就是我 ...
- 自己动手搭建 MongoDB 环境,并建立一个 .NET HelloWorld 程序测试
关于 MongoDB,下面来自百度百科: MongoDB[1]是一个基于分布式文件存储的数据库.由C++语言编写.旨在为WEB应用提供可扩展的高性能数据存储解决方案. mongoDB[1] Mon ...
- hdu 2014鞍山赛区 5073 Galaxy
题意:就是给你 n 个数,代表n个星球的位置,每一个星球的重量都为 1 ! 开始的时候每一个星球都绕着质心转动,那么质心的位置就是所有的星球的位置之和 / 星球的个数 现在让你移动 k 个星球到任意位 ...