概述
学习目标:
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标签所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复