zoukankan      html  css  js  c++  java
  • Struts2之Struts2的标签库

    前言:

    Struts2提供了大量的标签 ,用来帮助开发表现层页面,这些表现一方面解决了美观性的需求,因为它们具有html标签一样的外观,另一方面它们解决了功能性的需求,

    因为它们具有jsp脚本一样的逻辑控制能力。相对于struts1提供的标签库,struts2的标签库功能更加强大,而且简单易用。

    1.Struts2标签基础:

    struts2把所有的标签都定义在URI为“/struts-tags”的空间下,这点与struts1不同。

    struts2提供的标签可以分为三大类:

    UI标签:  主要是用于生成Html元素的标签

                UI标签又可分为:

                  表单标签:主要用于生成Html页面的form元素。

                   非表单标签:主要用于生成页面上的树,Tab页等标签

    非UI标签 : 主要是用于数据访问,逻辑控制的标签

                非UI标签又可分为:

                 流程控制标签:主要包括实现分支,循环等流程控制标签

                 数据访问标签:主要用于输出后台传过来的值。

    Ajax标签: 主要是用于支持ajax的标签

    使用struts2的标签:

    使用<%@taglib prefix="s"  uri="/struts-tags" %> 在页面身上导入标签库   prefix属性是为标签库的前缀

    2.OGNL表达式语言:  #

    OGNL表达式的功能类似于EL表达式功能,就是把“存入特定银行中的对象的值取出来”,在未使用OGNL表达式时,这几大银行是request,response,session,application

    等等。而使用OGNL表达式时,OGNL表达式维护了一个比较复杂的银行结构:

    Stack Context:  这是最大银行  所有的其他银行 对象  都放在它中

    Value Stack:    这是Stack Context银行中,比较重要的部门,它用于存放 系统创建的Action类的实例对象   把存入其中的Action实例对象称为根对象

    Action Context:   这是Stack Context银行中,一个普通的部门  ,  它用于存放 一次请求某个Action类时 生成的上下文对象   ,若在该上下文对象对象中放入的值 ,会直接放入Stack Context中

    Stack Context银行还可以包含

    parameters对象

    request对象

    session对象

    application对象

    attr对象:

    关系图如下:

     在Action处理中我们可以选择把一个值放入parameters对象  request对象 request对象 attr对象这些普通的对象中去(放在Stack Context中),也可把值放入Action Context的对象中(也是放在 Stack Context中),也可以选择把要返回值放入该Action类的实例对象中去(放入在Value Stack中)。

    由于把值放入Action实例对象中 ,即存在Value Stack中 ,在页面上取值时比较方便,所有Struts2建议我们把要放回的值放在Action实例对象中,而不是通过得到parameters对象  request对象 request对象 attr对象(这些称为命名对象)等Servlet的相关对象,把值放入它们之中。

    访问value Stack中Action实例对象的值:

    ${name}      或    标签<s:property  value="name">

    访问命名对象中值:

    标签<s:property value="#request.name ">

    OGNL中的集合操作:

    创建一个List集合,里面包含e1,e2,e3三元素   :   {e1,e2,e3}

    创建Map类型集合:  #{key1:value1,key2:value3,key3:value3}

    提供两个运算符  : in和 not in   判断某个元素是不是在指定集合中 和 某个元素是不是不在某个集合中   返回boolean值  

    表达式:'foo'  in   {'foo','bar'}  返回 true

               'foo' not  in   {'foo','bar'}  返回 false

    OGNL提供访问某个类的静态成员的功能:

    首先要在struts.xml文件中通过常量struts.ognl.allStaticMethodAccess 设置为 true

    OGNL通过如下规则访问某个类的静态成员  :

    访问类的静态Field  :   @className@staticField

    访问类的静态方法:    @className@staticMetod(value1,value2)

    如:

    <s:property  value="@java.lang.System@getenv('JAVA_HOME')">      输出jdk的目录           访问System类的静态getenv()方法 

    <s:property value="@java.lang.Math@PI">            显示3.1415926....                           访问Math类的静态Field   PI

    通过上面可以看出 OGNL表达式与EL表达式 不同 OGNL表达式必须结合Struts2的标签 才能完成值得输出   而EL表达式可以直接输出放在几大对象中的值。

    3.UI标签:

    表单标签:

    非表单标签:

    4.非UI标签:

     流程控制标签:   共有9个

    if     :<s:if   test="   " ></s:if>             test属性是一个可以返回boolean值的 表达式

    else if  :  <s:elseif  test=" "></s:elseif>   test属性是一个可以返回boolean值的 表达式

    else  :  <s:else>  </s:else>

    iterator : <s:iterator  value="  "   id=" "  status="  "> </s:iterator>    value属性是被迭代的集合,或者数组     id属性 是迭代元素的ID     status属性指定当前迭代器的实例对象名(该对象在Stack Context中 该对象有属性 

                     count:当前迭代了几个对象那个  index:当前迭代的对象的索引  even:当前迭代元素的索引是不是偶数  odd:当前迭代元素的索引是不是奇数  first:当前迭代元素是不是第一个元素  last:当前迭代元素是不是最后一个元素)

    append :  <s:append var=" ">                          apeend标签用于将多个集合对象 拼接成一个新的集合对象,并把新的集合对象放入 Stack Context中     var属性指定生成新的对象的名称

                        <s:param  value=" "> </s:param>          value属性指定  要拼接的对象

                       <s:param  value=" "> </s:param>           value属性指定  要拼接的对象

                    </s:append>

    generator:

    merge:

    sort:

    subset:

    数据访问标签:

    property:  <s:property  value=" "></s:property>   用于输出Stack Context , ValueStack, 和 Action Context中的值

    debug : <s:debug/>   用于在页面上生成一个调试链接     可以看到 Value Stack 和 Stack Context中的值    方便输出 

    action:

    bean:

    include:

    param:

    set:

    url:

    push:

  • 相关阅读:
    Java实现 LeetCode 799 香槟塔 (暴力模拟)
    Java实现 LeetCode 799 香槟塔 (暴力模拟)
    ASP.NET中使用Entity Framework开发登陆注册Demo
    ASP.NET中使用Entity Framework开发登陆注册Demo
    ASP.NET中使用Entity Framework开发登陆注册Demo

    requirejs
    转一个网址,canvas用法
    这是个排序,摘的,记一下
    今天面前端哦 2015 08 27
  • 原文地址:https://www.cnblogs.com/wangliyue/p/4124887.html
Copyright © 2011-2022 走看看