Struts2的表现层技术

概述

  • Struts2主要使用了Struts2标签库和OGNL (Object Ghaph Native Language,对象图导航语言)表达式语言二项技术来简化表现层方面的开发。
  • 使用标签可以避免在JSP页面中嵌套大量的Java脚本,极大的提高视图页面的可维护性。
  • struts2标签库使用OGNL表达式作为基础,极大的提高了对集合、对象的访问能力
  • struts2标签库支持模板和主题,极大的简化了视图页面的编写
  • Struts2提供了一个标签库:struts-tags标签库,几乎所有struts2标签都整合到其中。
  • 在JSP中使用struts2标签时,需要使用以下代码引入标签库:
<%@ taglib prefix="s" uri="/struts-tags" %>

Ajax 标签:

<%@ taglib prefix="sx" uri="/struts-dojo-tags" %>

OGNL表达式语言

OGNL是一种可以方便操作对象属性的开源表达式语言,是struts2的默认表达式语言。
优点:

  • 可以方便地访问OGNL上下文和ActionContext
  • 可以方便地操作对象、数组及集合

使用OGNL访问对象的属性的基本格式:

  • propertyName
  • #Object.propertyName

OGNL的操作涉及三个要素:

  • OGNL表达式:指定OGNL操作要"做什么"。是一个"链式"对象访问路径。
  • 根(Root)对象:指定OGNL操作对"谁操作"。可以以任意一个对象为根,通过OGNL可以访问与这个对象关联的其他对象。
  • 上下文(Context)对象:指定OGNL操作"在哪里进行"。Root对象所在环境就是OGNL的上下文环境。在表达式中访问Context中的对象,需要使用"#"号加上对象名称。

使用OGNL操作集合:

  1. 创建集合:
    1)List集合:{‘book1’,‘book2’,‘book3’}
    2)Map集合:#{‘bookl’:23,‘book2’:36}
  2. 使用in、not in元素符判断某个元素是否在指定集合中:
    <s:if test="‘book1’ in {‘book1’,‘book2’}">
  3. 使用选择操作符获取集合的子集:
    1)?: 获取所有符合条件的子集
    2)^:获取符合条件的第一个子集
    3) $:获取符合条件的最后一个子集
    例如:person.relative.{?#this.gender==“m”}

OGNL的"#"操作符的作用

  1. 访问OGNL上下文和Action上下文,此时"#"相当于ActionContext.getContext()

Action上下文Map对象说明:
ValueStack(值栈):为OGNL 上下文的根对象,当前的Action实例总是放到ValueStack,不需要使用"#“操作符,可直接访问该对象,其余Map对象访问时必须使用”#".
-植栈作用:是OGNL表达式存取数据的地方。植栈封装了
一次请求所需要的所有数据,在页面中与Action之间进行
数据交换。在Action中采用属性驱动和模型驱动与页面交
换数据时,Struts2会将数据自动存储到植栈中
-植栈的生命周期:植栈与Action的生命周期一致,
Struts2会为每次请求创建一个新的植栈。
例如:

parameters :包含当前HTTP请求参数的Map ,#parameters.id相当于request.getParameter("id")
request:包含当前HttpServletRequest的属性的Map,#request.name相当request.getAttribute("name") 
session: 包含当前HttpSession的属性的Map,#session.name相当session.getAttribute("name")
application:包含当前应用ServletContext的属性的Map,#application.name相当于application.getAttribute("name")
attr: 用于按page>request > session > application顺序访问其属性,#attr.name相当于按顺序在以上四个范围(scope)内读取name属性,直到找到为止
  1. 和?操作符结合来选择和投影集合
  • 选择(子集):
 books.{?#this.price<100} 
  • 投影:
books.{?#this.price<100}.{bookName}
  1. 用于构造Map
#{'bookl':'23','book2':'36'}

OGNL的"%"操作符的作用

使用%和"{“和”}“计算OGNL表达式的值作为标签的属性值,如:label=”%{username}"、label="%{#session.username}"

OGNL的"$"操作符的作用

"$"有两个主要的用途:
用于在国际化资源文件中,引用动作属性值及配置项中定义的属性值,如: m i n 、 {min}、 min{max}
在Struts2配置文件中,引用动作属性值,如:

<result>/admin.jsp?type=${type}</result>

struts2标签类型

-UI标签:
表单标签:主要用于生成HTML表单
非表单标签:主要用于在页面中生成一些非表单的可视化元素,如显示信息的标签:actionerror、actionmessage
-非UI标签:
逻辑控制标签:用于条件、循环等流程控制,如if、elseif、iterator
数据标签:用于数据存储和处理,如property、text
-Ajax标签:
主要用于支持Ajax,如显示日期的datetimepicker

struts2表单及其元素标签

表单标签

s:form
action:指定处理表单所提交信息的动作
method:定义表单信息提交的方法,默认为post
namespace:指定动作所在的命名空间

按钮标签

提交按钮:s:submit,用于提交表单数据
重置按钮:s:reset,用于返回表单的默认值

输入框标签

文本框标记:s:textfield,用于输入单行文本
密码框标记:s:password,用于输入密码
文本域标记:s:textarea,用于输入多行文本

name:定义输入框的名字,动作类通过该名字取得输入框的值
label:定义输入框的描述字符串,默认显示在输入框的左边
readonly:定义输入框的只读属性,true表示输入框不能编辑
rows:定义文本域的行数
cols:定义文本域的列数

选择框标签

单选框标签:s:radio,用于在一组选项中互斥选择,即同组中一次只能选择一项。
复选框集合标签:s:checkboxlist,设置同一组选项中可作多项选择的选择项,可一次设置多个复选框。
在这里插入图片描述

列表框标签

作用:用于创建列表框

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Struts2数据标签

s:action

用于在JSP页面直接调用一个Action

<s:action name="LoginAction" executeResult="true"/>

s:property

用于输出指定属性的值到浏览器

<s:property value="name"/>

s:label

只读标签,用于输出指定属性的信息到浏览器

<s:label label="爱好的运动" name="sports"/>

s:date

用于格式化并输出一个日期

<s:bean var="now" name="java.util.Date"/>
<s:date name="#now"/>(yyyy-MM-dd hh:mm:ss)
<s:date name="#now" format="dd/MM/yyyy"/>

s:url

用于生成一个URL地址,经常使用s:param标签来提供参数

<s:url action="check" var="url"/>
<s:url value="http://localhost:8080/
    struts2/aa.jsp"/>

s:text

用于显示资源文件中的指定key的属性值

<s:text name="helloWorld"/>

s:param

用于为其他标签提供参数,经常与s:url等标签一起使用

<s:url var="url" action="loginAction">
<s:param name="username" value="'nch'"/>
   <!--<s:param name="username">nch</param>-->
</s:url>

Struts2逻辑标签

s:if

用于进行条件判断,如果条件为真,则执行该标签体内的代码

s:else

如果s:if不满足条件,则执行s:else后面的语句

s:elseif

与s:if结合使用,用于进行条件判断,如果条件为真,则执行该标签体内的代码。具有s:if同样的属性

s:iterator

用于循环遍历集合或数组中的所有元素
一般配合<s:property>标签来输出所遍历到的元素

<s:iterator value="strs" var="str">
	       <s:property value="str"/>
         </s:iterator>

非表单UI标签

s:fielderror

用于显示字段级别错误信息

<s:fielderror/>
<s:fielderror fieldName="username"/>

s:actionerror

用于输出动作类级别的错误信息
例如:

<s:actionerror/>

s:actionmessage

用于输出动作类级别的信息
例如:

<s:actionmessage/>

使用主题模板

Struts2的UI标签都是基于主题和模板的,模板是一个UI标签的外在表现形式,一系列样式和视觉效果相似的模板就形成了一个主题。

Struts2提供了以下三种主题:
-simple
-xhtml
-css_xhtml

Struts2的默认主题是xhtml,可通过theme属性修改该默认主题,如:

  <s:form theme="simple"/>

示例:

https://download.csdn.net/download/weixin_43906969/13205094

pom.xml导入的依赖:


    <dependencies>
        <dependency>
            <groupId>org.ow2.asm</groupId>
            <artifactId>asm</artifactId>
            <version>7.1</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.ow2.asm/asm-commons -->
        <dependency>
            <groupId>org.ow2.asm</groupId>
            <artifactId>asm-commons</artifactId>
            <version>7.1</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.ow2.asm/asm-tree -->
        <dependency>
            <groupId>org.ow2.asm</groupId>
            <artifactId>asm-tree</artifactId>
            <version>7.1</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/commons-fileupload/commons-fileupload -->
        <dependency>
            <groupId>commons-fileupload</groupId>
            <artifactId>commons-fileupload</artifactId>
            <version>1.4</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/commons-io/commons-io -->
        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.6</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.apache.commons/commons-lang3 -->
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>3.8.1</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.freemarker/freemarker -->
        <dependency>
            <groupId>org.freemarker</groupId>
            <artifactId>freemarker</artifactId>
            <version>2.3.28</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.javassist/javassist -->
        <dependency>
            <groupId>org.javassist</groupId>
            <artifactId>javassist</artifactId>
            <version>3.20.0-GA</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-api -->
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-api</artifactId>
            <version>2.12.1</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/ognl/ognl -->
        <dependency>
            <groupId>ognl</groupId>
            <artifactId>ognl</artifactId>
            <version>3.1.26</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.apache.struts/struts2-core -->
        <dependency>
            <groupId>org.apache.struts</groupId>
            <artifactId>struts2-core</artifactId>
            <version>2.5.22</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
            <scope>provided</scope>
        </dependency>

    </dependencies>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一峰说

坚持价值输出

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值