zoukankan      html  css  js  c++  java
  • 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日期空间标签示例

  • 相关阅读:
    14款响应式布局的前端开发框架
    如何在本地进行微信公众号的开发调试
    微信公众帐号应用开发—本地调试
    利用H5开发微信公众号
    微信公众平台开发入门教程
    JAVA编程不得不看的几本经典书籍
    使用百度UMeditor富文本编辑器,修改自定义图片上传,修改源码
    网站建设需要哪些程序
    Visual Studio 2013 中使用断点
    Objective-c 实例变量的访问级别
  • 原文地址:https://www.cnblogs.com/ablejava/p/5677797.html
Copyright © 2011-2022 走看看