通用标签  

  1.property(取值)
    property:<s:property value="username"/>

    property 取值为字符串:<s:property value="'usernmae'"/>

    property 设定默认值:<s:property value="admin" default="管理员"/>

    property 设定HTML:<s:property value="'<hr/>'" escape="false"> (默认为true 即遇到html标签不要进行转义)

    注:因为ognl 表达式 可能是有很多类型的结果,所以默认是Object类型,如<s:property value="username"/> username 是Object类型

    如果想要取值为字符串 需要再加上     '  '

    /*如果取ValueStack中的值时,是不需要带#的,可以直接取,除了ValueStack中的,其他的,取的时候都要加 # */

  

  2.set (设值)一般用于:当某个属性的名字太长,想要换个名字,可以用set来换一下

    set 设定adminName值:<s:set var="adminName" value="username"/> (默认会存在 request 和 ActionContext)

    set 从request取值:<s:property value="#request.adminName"/>

    set 从ActionContext取值:<s:property value="adminName"/>

    set 设定var 范围ActionContext:<s:set var="adminPassword" value="password" scope="session">

    set 使用#取值:<s:property value="#adminPassword"/>

  

  3.bean

         <li>bean 定义bean,并使用param来设定新的属性值:
<s:bean name="com.bjsxt.struts2.tags.Dog">
<s:param name="name" value="'DogName'"></s:param>
<s:property value="name"/> </s:bean>
</li> <li>bean 查看debug情况:
<s:bean name="com.bjsxt.struts2.tags.Dog" var="myDog">
<s:param name="name" value="'DogName'"></s:param>
<s:debug></s:debug>
</s:bean>
拿出值:
<s:property value="#myDog.name"/> </li>

    两个属性:

    1.name new 哪个bean的对象(Dog)

    2.var 设定要不要把它放到ActionContext里面

    执行过程: 开始的时候,new 这个指定对象(如:Dog),放到栈顶,在结束的时候,从栈顶拿走

    set 从相应的范围取值:<s:property value="#session.adminPassowrd">

  

  4.include(不常用)

    <s:include value="/_include1.html"></s:include>

    include _include1.html 包含静态英文文件,说明%用法 %{}

    <s:set var="incPage" value="'/_include1.html'" />

    <s:include value="%{#incPage}"></s:include>

    注:过程 1.往request 和 AcctionContext中 存了一个 key为 incPage , value 为 '/_include1.html' (字符串)

      2.使用include标签 取出incPage对应的值,进行包含

      如果include 标签中的value属性是Object类型(支持OGNL表达式) 那么 取出在ActionContext中的incPage对应的值 #incPage

      但是include 标签中的value属性是String类型,但是如果想要取出incPage对应的值,必须为 %{#incPage} ,使其支持OGNL表达式

    所以:%的用法,将原本的文本属性解析为ognl类型,对于原本就是ognl的属性不起作用

控制标签

  1.if  elseif  else

    <s:set var="age" value="#parameters.age[0]"></s:set>

    <s:if test="#age < 0">wrong!</s:if>

    <s:elseif test="#age <20" >too young!</s:elseif>

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

  注:parameters 指的是前台传来的参数,前台传来的参数默认都是String类型吧,

    为什么使用前台传来的参数可以直接和数字去比较, Struts这里做了处理转换吧

  

  2.iterator
    三个属性
    1.value 指定遍历的集合
      <s:iterator value="{'a', 'b', 'c'}" >
         <s:property /> |
      </s:iterator>

     会默认构造成一个List集合,对这个List集合进行遍历

    2.var 指向当前遍历的元素

    <s:iterator var="this" value="{'aaa','bbb','ccc'}">
      <s:property value="#this.toUpperCase()"/> |
    </s:iterator>

     对每一个遍历的元素(字符串)调用toUpperCase() 变成大写

    3.status 遍历的状态
    <li>使用status:<br />
    <s:iterator value="{'aaa','bbb','ccc'}" status="status">
      <s:property />|
      遍历过的元素总数: <s:property value="#status.count"/>
      遍历过的元素索引: <s:property value="#status.index"/>
      当前是偶数?: <s:property value="#status.even"/>
      当前是奇数?: <s:property value="#status.odd"/>
      是第一个元素吗?: <s:property value="#status.first"/>
      是最后一个元素吗?: <s:property value="#status.last"/>
      <br />
    </s:iterator> 得到遍历的一些状态 如上

  注:构造Map集合,需要在前面加上 '#' <s:iterator value="#{1:'a', 2:'b', 3:'c'}" >
  对集合的遍历是使用<s:property />来取出每一个元素

  3.subset
    subset标签用于取得集合的子集

UI标签

  注:在使用 <s:fielderror fieldName="fielderror.test" theme="simple"></s:fielderror>

  Struts会使用自己的CSS 为结果进行渲染,然而我们一般不想用这种渲染,所以我们要定义自己的theme,

  或者修改Struts中的theme来得到我们想要的显示效果

  <s:form>标签 是struts2 对 表单样式的 封装

  <s:form >

    <s:textfield name='aaa'></s:textfield>

  </s:form>

  如上,在html源码是这样的效果(在 theme="simple"的前提下 不同的theme 有不同的结果)

    <form id="theme" name="theme" action="/Struts2_21_Theme1/theme.action" method="post">

      <input type="text" name="aaa" value="" id="theme_aaa"/>

    </form>

  theme (simple xhtml(默认)css_xhtml ajax)

  定义自己的theme
    1.css (自己编写css或覆盖struts2原来的css)
    2.覆盖单个文件(fieldError.ftl) 修改struts中的theme 需要懂 freemarker
    /*注意:fieldError.ftl 需要放到 template.simple 包下,不然无法找到这个文件*/
    3.定义自己的theme (第五种theme)
    创建一个包名为 template.mytheme 放到根目录下,将一个theme需要的文件,统统拷贝到这个包下,其中fieldError.ftl 是经过修改的
    之后要使用主题,可以使用 value 为 mytheme 的主题。 在struts.xml中声明 <constant name="struts.ui.theme" value="mytheme" />
    4.实战:
      1.theme 一般都使用simple
      2.fieldError 特殊处理 (使用第一点的方式,比较直接方便)
      3.自己控制其他标签的展现(正常使用struts2的其他标签)

5.Struts2-Struts标签的更多相关文章

  1. [struts2]struts标签遍历map[转]

    转至:http://hanxin0311.iteye.com/blog/1745792 private Map<String, String> strMap = new HashMap&l ...

  2. Struts2 学习笔记15 Struts标签 part1

    来说一下Struts标签,之前我们也很多地方用到了,还是来总结一下. 首先是property标签. <li>property:<s:property value="user ...

  3. struts2学习(8)struts标签1(数据标签、控制标签)

    一.struts2标签简介: struts标签很多,功能强大,这是优点: 但是缺点的话,性能方面可能会,各方面速度啊啥的会降低:有人比较测试,struts性能比jstl低很多:   二.struts2 ...

  4. Struts2——(4)OGNL与struts标签

    一.OGNL Object Graphic Navigation Language  对象图导航语言 依赖于 ognl.jar包 OGNL不是Struts框架独有的,它是和框架独立的一种技术. 例如: ...

  5. struts2 taglib struts标签学习整理中

    项目中经常会用到struts标签,这样可以减少代码量. select用法: <s:select list="#request.sysTypes" name="rul ...

  6. struts2学习(9)struts标签2(界面标签、其他标签)

    四.struts2界面标签: 五.其他标签: 1.界面标签: uiTag.jsp: <body> <h>界面标签</h> <hr/> <a hre ...

  7. 【Java EE 学习 36】【struts2】【struts2系统验证】【struts2 ognl值栈】【struts2 ongl标签】【struts2 UI标签】【struts2模型驱动和令牌机制】

    一.struts2系统验证 1.基于struts2系统验证的方式实际上就是通过配置xml文件的方式达到验证的目的. 2.实际上系统校验的方法和手工校验的方法在底层的基本实现是相同的.但是使用系统校验的 ...

  8. Struts2 Struts.xml DTD 说明

    转自:http://blog.csdn.net/cuixiuqin1954/article/details/4228741 关于Struts2中的核心配置文件struts.xml,就其DTD(Docu ...

  9. Struts2的标签库(四)——数据标签

    Struts2的标签库(四) --数据标签 1.action标签 该标签用于在jsp页面直接调用一个Action,通过指定executeResult参数,还可以将Action的处理结果包含到此页面中来 ...

  10. Struts2的标签库(二)——OGNL表达式

    Struts2的标签库(二) --OGNL表达式 1.Struts2中的OGNL表达式增加了ValueStack的支持. 注:ValueStack--实际上是一个容器对象,该对象在启动Struts2框 ...

随机推荐

  1. 小D课堂 - 新版本微服务springcloud+Docker教程_5-05熔断降级服务异常报警通知

    笔记 5.熔断降级服务异常报警通知实战     简介:完善服务熔断处理,报警机制完善 1.加入redis依赖         <dependency>             <gr ...

  2. Android提升Gradle编译速度或减少Gradle编译时间.md

    目录 Android如何提升Gradle编译速度或减少Gradle编译时间 最终优化方案 优化效果比对 将所有项目源码,各种缓存临时目录都移动到高性能SSD磁盘上 gradle.properties ...

  3. docker-搭建efk收集docker日志

    新建docker-compose.yml文件 version: '2' services: fluentd: build: ./fluentd volumes: - ./fluentd/conf:/f ...

  4. 【JVM学习笔记】字节码文件结构

    https://www.cnblogs.com/heben/p/11468285.html  比这篇笔记更好一点 新建一个Java类 package com.learn.jvm; public cla ...

  5. MMORPG服务器架构

    MMORPG服务器架构 一.摘要 1.网络游戏MMORPG整体服务器框架,包括早期,中期,当前的一些主流架构2.网络游戏网络层,包括网络协议,IO模型,网络框架,消息编码等.3.网络游戏的场景管理,A ...

  6. RocketMQ之四:RocketMq事务消息

    事务消息 通过消息的异步事务,可以保证本地事务和消息发送同时执行成功或失败,从而保证了数据的最终一致性. 发送端执行如下几步: 发送prepare消息,该消息对Consumer不可见 执行本地事务(如 ...

  7. 二、windows下搭建vue开发环境+IIS部署

    有时我们的服务器并不一定是node,也许是IIS,这样我们就需要把工程构建出来,与IIS集成. 构建该项目的命令如下 cnpm run build 将dist文件夹拷贝出来,放到IIS的发布目录,在浏 ...

  8. unity+android权限--打开应用不弹权限,动态请求权限

    因为笔者之前的游戏需要分享图片,会请求外部储存,第一次打开游戏就会出现弹窗: 很多人对这个很敏感,怕你访问到他们的照片隐私,看到这个权限就拒绝,甚至卸载,实际上我们只是想截屏游戏内容分享给其他玩家,但 ...

  9. mybatis resultMap 子元素

    resultMap constructor - 类在实例化时,用来注入结果到构造方法中 idArg - ID 参数;标记结果作为 ID 可以帮助提高整体效能 arg - 注入到构造方法的一个普通结果 ...

  10. 【Matlab开发】MATLAB编译C/C++代码

    在使用MATLAB编译C/C++代码时,C/C++代码中要使用一个mexFunction函数,那么这个函数是如何定义,在编译时又是如何实现的呢?下面我将使用实例进行说明. 如一个简单的函数: doub ...