我是靠谱客的博主 呆萌秀发,最近开发中收集的这篇文章主要介绍17、ognl和ui标签,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

学习目标:

1、了解ognl表达式的历史

2、了解struts2的ui标签

学习过程:

前面我们的页面还是使用EL表达式和JSTL标准标签库,但是struts2推介使用ognl表达式和struts2的标签,下面我们就学习ognl和相关的一些标签。

一、ognl表达式

OGNL全称是Object-Graph Navigation Language的缩写,它是一种功能强大的表达式语言。Struts 2默认的表达式语言就是使用OGNL。OGNL常常结合struts2标签来使用。使用比较灵活,但学习起来也相对来说比较难,尤其是“%”、“#”、“$”这三个符号的使用,不熟练的话,常常会犯晕。下面我们就简单先介绍一下这三个符号。大家先浏览一下,在后面讲解标签的时候会应用到。

1、“#”符号有三种用途:  

(1)、访问非根对象(struts中值栈为根对象)。

“#”相当于ActionContext.getContext(),这也是ognl最基本的功能,上下文包括以下几个:

     |
                    |--application
                    |
                    |--session
      context map---|
                    |--value stack(root)
                    |
                    |--action (the current action)
                    |
                    |--request
                    |
                    |--parameters
                    |
                    |--attr (searches page, request, session, then application scopes)

示例如下:

application   

 包含当前应用的ServletContext的属性(attribute)的Map   

 #application.userName相当于 application.getAttribute("userName")    

session   

 包含当前HttpSession的属性(attribute)的Map   

 #session.userName相当于session.getAttribute("userName")    

parameters   

 包含当前HTTP请求参数的Map   

 #parameters.id[0]作用相当于   request.getParameter("id")       

request   

 包含当前HttpServletRequest的属性(attribute)的Map   

  #request.userName相当于request.getAttribute("userName")    

attr   

attr 用于按request > session > application顺序访问其属性(attribute),#attr.userName相当于按顺序在以上三个范围(scope)内读取userName属性,直到找到为止。

(2)、用于过滤和投影(projecting)集合

如: books.{?#this.price>35}     

用于过滤和投影(projecting)集合,如books.{?#this.price<100}。 你可以选择其中一种投影方式

  • ? - 投影(过滤)所有符合条件的集合
  • ^ - 投影(过滤)第一个符合条件的元素
  • $ - 投影(过滤)最后一个符合条件的元素

(3)、构造Map 

如:#{'foo1':'bar1', 'foo2':'bar2'}这种方式常用在给radio或select、checkbox等标签赋值上。如果要在页面中取一个map的值可以这样写:    

2、“%”符号的用途是在标签的属性值被理解为字符串类型时。告诉执行环境%{}里的是OGNL表达式,并执行

实际上就是让被理解为字符串的表达式,被真正当成ognl来执行。很有点类似javascript里面的eval_r()功能。 

3、“$”有两种用途   

(1)、在国际化资源文件中,引用OGNL表达式。   

在国际化配置文件中配置如:

reg.agerange=年龄必须在${min}同${max}之间

(2)、在Struts 2配置文件中,引用OGNL表达式:    

在我们讲解文件下载时使用过,如:

<param name="contentDisposition">attachment;filename="${downName}"</param>

在后面讲解验证框架时,我们还会使用到这个功能。

4、还支持lamba 表达式

如struts2的官方示例如下:

实现费波那契数列,是以递归的方法来定义:

F_{0}=0

F_{1}=1

F_{n}=F_{{n-1}}+F_{{n-2}}

使用struts2实现。

二、UI标签

UI标签主要分为主题和模板标签、form表单标签两类。标签种类比较多,但是相对简单而且容易使用,struts2的官方文档给的示例比较详细,这里我就简单的介绍一下,详细可以参考官方文档:

http://struts.apache.org/release/2.3.x/docs/ui-tags.html

首先,我们要先声明使用struts2的标签:

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

然后我们使用struts2的form标签,我们可以修改之前的用户注册页面,使用struts2的表单标签重写,代码如下:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@taglib prefix="s" uri="/struts-tags"%>
<%
    String path = request.getContextPath();
    String basePath = request.getScheme() + "://"
            + request.getServerName() + ":" + request.getServerPort()
            + path + "/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>添加用戶</title>
</head>
<body>
    <!-- struts2 UI Form  -->
    <s:form action="add" namespace="/user" method="post" theme="xhtml">
        <!--label 显示文本信息   key 读取国际化资源文件-->
        <s:textfield key="username" name="user.username"></s:textfield>
        <s:password label="密码" name="user.passwd"></s:password>
        <s:textfield name="user.age" key="用户年龄"></s:textfield>
        <s:textfield name="user.registerTime" label="注册时间"></s:textfield>
        <s:textfield name="user.weight" label="体重"></s:textfield>
        <s:textfield name="user.email" label="邮箱"></s:textfield>
        <s:radio list="#{'1':'男','0':'女'} " name="user.gender" label="性别"
            value="1"></s:radio>
        <s:checkboxlist list="#{'1':'篮球','2':'羽毛球','3':'足球'}" label="爱好"
            name="like" value="{'1','3'}"></s:checkboxlist>
        <s:select list="#{'1':'计算机','2':'非计算机'} " label="专业" name="pro" />
        <s:submit value="注册"></s:submit>
    </s:form>
</body>
</html>

 

最后

以上就是呆萌秀发为你收集整理的17、ognl和ui标签的全部内容,希望文章能够帮你解决17、ognl和ui标签所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(48)

评论列表共有 0 条评论

立即
投稿
返回
顶部