当前位置 > 首页 > Java

Struts 2中的表达式语言

1/10/2011 8:42:00 PM来源:Java

?

本人是一个EL(Expression Language,以下译为表达式语言)的支持者。因为我对<% %>写法极为反感,忘记了在那本书上看到的一句话——“使用标志(Tag)的一个目的就是避免在JSP页面中出现过多的<%%>的语句,使页面与后台代码分离。”

表达式语言主要有以下几大好处:

  1. 避免(MyType) request.getAttribute()myBean.getMyProperty()之类的语句,使页面更简洁;
  2.  支持运算符(如+-*/),比普通的标志具有更高的自由度和更强的功能;
  3.  简单明了地表达代码逻辑,使用代码更可读与便于维护。

Struts 2中的表达式语言

Struts 2支持以下几种表达式语言:

  1. OGNL(Object-Graph Navigation Language),可以方便地操作对象属性的开源表达式语言;
  2.  JSTL(JSP Standard Tag Library),JSP 2.0集成的标准的表达式语言;
  3.  Groovy,基于Java平台的动态语言,它具有时下比较流行的动态语言(如Python、Ruby和Smarttalk等)的一些起特性;
  4.  Velocity,严格来说不是表达式语言,它是一种基于Java的模板匹配引擎,具说其性能要比JSP好。

Struts 2默认的表达式语言是OGNL,原因是它相对其它表达式语言具有下面几大优势:

  1. 支持对象方法调用,如xxx.doSomeSpecial()
  2.  支持类静态的方法调用和值访问,表达式的格式为@[类全名(包括包路径)]@[方法名 | 值名],例如:@java.lang.String@format('foo %s', 'bar')@tutorial.MyConstant@APP_NAME
  3.  支持赋值操作和表达式串联,如price=100, discount=0.8, calculatePrice(),这个表达式会返回80;
  4.  访问OGNL上下文(OGNL context)和ActionContext;
  5.  操作集合对象。

OGNL的用法

OGNL是通常要结合Struts 2的标志一起使用,如<s:property value="xx" />等。大家经常遇到的问题是#、%和$这三个符号的使用。下面我想通过例子讲述这个问题:

首先新建名为Struts2_OGNL的Web工程,配置开发环境。之前很多朋友在使用Struts 2的过程中都遇到乱码问题。当然乱码问题由来已久,而且涉及多方面的知识,所以并非三言两语可以说明白,而且互联网上也已经有很多这方便的文章,大家可以Google一下。不过,如果你在开发的过程,多注意一下,避免乱码问题也不难。乱码多数是由于编码与解码所使用的方式不同造成的,所以我建议大家将编码方式都设为“utf-8”,如<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8" %>。另外,在配置web.xml时使用ActionContextCleanUp过滤器(Filter),如下面代码所示:


  • 【引用】 J2EE项目开发常见问题

    12/26/2010 6:57:00 PM

    和大家分享这篇日志,我的看法是: ? 原文地址: ★J2EE项目开发常见问题★ 原文作者: guifeng2002 一、 war 包中的文件的读取 在开发 J2

  • How to Optimize Oracle Solaris Applications for Intel Platforms

    4/6/2010 8:12:00 AM

    A technical guide for developers and system administrators that explains how to use the capabiliti

  • (转)SSI(Struts2, Spring, iBatis)框架整合小结

    9/13/2010 4:32:00 PM

    MVC对于我们来说,已经不陌生了,它起源于20世纪80年代针对smalltalk语言的一种软件设计模式,现在已被广泛应用。近年来,随着java的盛行,MVC的低耦合性、高重用性、可维护性、软件工程的

  • hibernate 的fetch

    7/27/2011 1:19:00 PM

    fetch的值join/select。 join 查询的时候,是用以条语句查处所有记录,包括关联表记录,select查出的是N+1条记录,两个都是差不多的,但是如果用了lazy=true,延迟加载

  • More Fun with AJAX

    2/24/2007 8:34:00 PM

    Get all the info you need to AJAX-enable your web applications on the newly redesigned AJAX website

  • Deep Dive: Project Tango, An Interview With Arun Gupta (Vodcast)

    8/31/2007 6:27:00 PM

    Java.sun.com writer Ed Ort interviews Arun Gupta, Sun Technology Evangelist for Web Services and Ne

  • Hibernate缓存概述

    3/9/2011 11:01:00 AM

    Hibernate在查询数据时,首先到缓存中查找,如果找到直接使用,找不到就会从物理数据源中检索,所以把频繁使用的数据加载到缓存区后,就可大大减少应用程序对物理数据源的访问,使得程序的运行性能明显的

  • Spring+hibernate延迟加载

    12/5/2010 4:15:00 PM

    我们在项目中一般都会使用Spring来管理 Hibernate 的session, 但是在查询数据的时候默认会使用lazy-loading方式的,也就是通常所说的延迟加载,延迟加载方式不同于普

  • Tomcat:session的默认有效时间设置

    10/25/2010 7:30:00 PM

    服务器是 tomcat : 在conf目录下的web.xml文件中有配置: <session-config>? <session-timeout>60</ses

  • Mobility Podcasts: Frankfurt and Bangalore

    1/31/2009 8:32:00 PM

    Mobile & Embedded evangelist Terrence Barr reports from the Sun Tech Days in Frankfurt, Germany