struts2一些概念介绍和标签的使用

简介:  依赖注入 模块包含struts.xml的模块包含格式 OGNL  对象导航语言   有个超大的好处就是根据对象访问属性,避免混乱。 OGNL标签分为:data tags和 control  tags一、数据标签property标签获取值栈中的普通对象是访问哪些有get和set的属性的方法name:name:访问值栈中的普通对象的普通方法   1.

 

 

依赖注入

 

模块包含

struts.xml的模块包含格式

<include file="xx.xml" >

 

OGNL  

对象导航语言   有个超大的好处就是根据对象访问属性,避免混乱。

 OGNL标签分为:data tags和 control  tags

一、数据标签

property标签

获取值栈中的普通对象

<s:property   value=""/>

是访问哪些有get和set的属性的方法

name:<s:property value="name"/><br>
name:<s:property value="user.name"/><br>

访问值栈中的普通对象的普通方法

   1.password是String类型

   password:<s:property   value="password.length()"/><br>

   2.实体类中自定义对象的普通方法

eat:<s:property   value="person.eat()"/><br>

   3.Action类中定义的普通方法

<s:property   value="methodaction1()"/>

   4.访问集合

      1>array  

        和list一样

      2> list

           访问list

           <s:property   value="listname"/>

           访问list某个属性的集合

           <s:property   value="listname.{age}"/>

           访问list某个集合的某特定值

            <s:property   value="listname.{age}[0]"/>或者

            <s:property   value="listname[o].age"/>更容易理解和记忆

 

      3>set

          和list一样

      4>map

                 访问map单个元素

                 <s:property   value="mapname.key"/>或者 <s:property   value="mapname['key']"/>  单引号

                 访问map所有key

                 <s:property   value="mapname.keys"/>

                 访问map所有value

                 <s:property   value="mapname.values"/>

                 访问容器的大小

                  <s:property   value="mapname.size()"/>或者  <s:property   value="mapname.size"/>

 

 

 

注:什么是普通方法和属性:就是非static的方法和非构造方法和属性

   5.访问静态方法和和属性(需要改设置)

 <constant name="struts.ognl.allowStaticMethodAccess" value="true"></constant>struts.xml中修改

 

 

<s:property   value="@全类名@方法或属性"/>

 

 

6.投影

   users为set集合

   <s:property   value="users.{?#this.age==1}.{0}"/>

   <s:property   value="users.{^#this.age>1}.{age}"/>  age大于1集合中的第一个元素

   <s:property   value="users.{$#this.age>1}.{age}"/>  age大于1集合中的第后一个元素

   <s:property   value="users.{$#this.age==1}.{age}==null"/> 判断集合是否为空

两者都可以但是第二个更明确。

name:<s:property value="name"/><br>
name:<s:property value="user.name"/><br>

 

 

set标签

<s:set var=""   value=""/>  value的type为object,可以用来重命名

如:在浏览器中地址栏中输入...&age=-8

 

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

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

 

  1. <s:set var=”includepage” value=”'/index.html'” />  
  2.  <s:property value=”#includepage” />
  3. <s:include  value="#includepage"  />     include标签value的type是字符串类型,"#includepage" 在解析的时候会被解析成字符串
  4. <s:include  value="%{#includepage}"  />这一个加上%{}就会被当做ognl表达式

 二、控制标签

if标签 

 <s:if test=""></s:if>  test的type是布尔型 boolean

 

 iterator标签

遍历集合:
<s:iterator value="{'1','2','3'}">
<s:property/>
</s:iterator>
<br>
自定义变量:
<s:iterator value="{'aa','bb','cc'}" var="w">
<s:property value="#w.toUpperCase()"/>
</s:iterator>
<br>
遍历map
<s:iterator value="#{'a':'A','b':'B','c':'C'}">
<s:property value="key"/>|<s:property value="value"/>
</s:iterator>

使用status

使用status <br>
<s:iterator value="{'aa','bb','cc'}" status="status">
<s:property/>
遍历过的总数:<s:property value="#status.count"/><br>
当前遍历的的索引位置:<s:property value="#status.index"/><br>
当前是奇数?:<s:property value="#status.even"/><br>
当前是偶数?:<s:property value="#status.odd"/><br>
当前是第一个元素?:<s:property value="#status.firt"/><br>
当前是最后一个元素?:<s:property value="#status.last"/>
<hr>
</s:iterator>

 subset标签

 

 

注:从例子可以看出定义list和map的差别

 

目录
相关文章
|
存储 缓存 移动开发
|
程序员 API 定位技术
500行代码实现贪吃蛇(1)
500行代码实现贪吃蛇(1)
106 4
|
SQL 关系型数据库 PostgreSQL
SqlAlchemy 2.0 中文文档(七十八)(4)
SqlAlchemy 2.0 中文文档(七十八)
78 0
|
XML Java 数据格式
Spring Bean的生命周期和扩展点源码解读
Spring Bean的生命周期和扩展点源码解读
255 0
|
设计模式 算法 前端开发
前端实现设计模式之策略模式
策略模式是一种行为型设计模式,它允许在运行时选择算法的行为。通过将不同的算法封装在独立的策略类中,并使它们可以互相替换,策略模式提供了一种灵活的方式来处理不同的情况或需求。在前端开发中,策略模式常用于处理复杂的业务逻辑或决策流程。本文将介绍策略模式的概念和应用,并提供具体的代码示例和解读。
319 0
|
算法
​LeetCode刷题实战317:离建筑物最近的距离
算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试。所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 !
435 0
​LeetCode刷题实战317:离建筑物最近的距离
|
负载均衡 网络协议 算法
每周一个 Python 模块 | socket
Socket 提供了标准的 BSD Socket API,以便使用 BSD 套接字接口通过网络进行通信。它包括用于处理实际数据通道的类,还包括与网络相关的功能,例如将服务器的名称转换为地址以及格式化要通过网络发送的数据。
247 0