- 浏览: 399853 次
- 性别:
- 来自: 昆明
文章分类
- 全部博客 (198)
- java (28)
- J2EE (19)
- struts (33)
- sping (13)
- hibernate (18)
- mybatis (15)
- connection pool (3)
- DB (26)
- SQL (21)
- html (13)
- js (7)
- json (3)
- jquery (2)
- document (17)
- linux (15)
- C# (1)
- url (2)
- eweb4j (1)
- Turbine (1)
- 框架 (11)
- jdbcTemplate (3)
- aop (2)
- windows (2)
- ubuntu (1)
- eclipse (11)
- JPA (8)
- svn (4)
- get 传值 (2)
- mysql (5)
- oracle (2)
- hadoop (1)
- MongoDB (2)
- spring (1)
- python (1)
最新评论
-
jcbingjc:
楼主,你好,按照上面的配置,我报如下错误:Missing Pe ...
[properJavaRDP]在网页中实现远程连接 -
sucful:
折腾了半天跑不通 ,要传就搞个完整的吧
Struts2 <sx:div/>实现页面模块异步刷新 -
Kattou:
你好! 看了你写的这个分页 感觉很好, 但是不怎么会用么,请指 ...
jsp分页控件 -
我叫PSB:
地址完全用不了
eclipse中的安装 jseclipse -
1111emotion:
我的工程里还是有乱码的情况,我该改的地方都改了。
Eclipse/MyEclipse更改默认字符集 设置UTF-8
我想问一下,还有没有其它的属性会解析?
另外就是<s:hidden id="_r" value="form.r"/>我试这个时,发现form.r并没有被解析?换成<s:hidden id="_r" value="%{form.r}"/>才可以。
Struts2的OGNL表达式中三个符号的用法。
通常时候,%很少使用,除非极个别的时候。
但#的用法非常广泛,
1.直接在表达式中生成Map对象时就是用该符号。
2.访问Stack Context中的值都需要使用。
$的用法:
1.取出集合元素的最后一个元素。
2.直接访问ValueStack根的属性。
使用<s:debug/>可以看一下这个调试页,然后决定用#或$吧。
Struts2还提供了一些命名对象,这些命名对象与根对象无关,它们只是存在于Stack Context中。所以,访问这些对象时需要使用#前缀来指明。
1.parameters对象:用于访问HTTP请求参数。例如#parameters['foo']或#parameters.foo,用于返回调用HttpServletRequest的getParameter("foo")方法的返回值。
2.request对象:用于访问HttpServletRequest的属性。例如# request ['foo']或# request.foo,用于返回调用HttpServletRequest的getAttribute("foo")方法的返回值。
3.session对象:用于访问HttpSession的属性。例如# session ['foo']或# session.foo,用于返回调用HttpSession的getAttribute("foo")方法的返回值。
4.application对象:用于访问ServletContext的属性。例如# application ['foo']或# application.foo,用于返回调用ervletContext的getAttribute("foo")方法的返回值。
5.attr对象:该对象将依次搜索如下对象:PageContext、HttpServletRequest、HttpSession、ServletContext中的属性。
注意:当系统创建了Action实例后,该Action实例已经被保存到ValueStack中,故无需书写#即可访问Action属性。
提供多一种访问静态方法和变量的方式.
@className@variableName
@className@methodName()
如:<s:property value="@java.lang.Math@random()"/>
@examples.chap8.Muppet@OG_MUPPET
@examples.chap8.Muppet@getOgMuppet()
在数据库的设计中,字典项是经常使用的技巧。
比如在一个图书馆系统中,书籍表(Book)会有一个分类字段,这时候我们一般会单独建立一张分类表(Category),在书籍表只保存分类表的ID。
在用户界面上显示书籍明细的时候,会要求显示CategoryID在Category表中对应的名称。
这样通常的做法是把Book和Category两张表进行关联。
但在实际应用中,Category一般都是Cache在应用服务器端,再使用数据表的连接就不够高效。
我的做法是这样的:在iBatis中使用SqlMap从表中将数据取出,此时不使用数据表的连接。
public class Book {
private int id;
private String name;
private int categoryId;
private String author;
}
public class Category {
private static Map<Integer, Category> cacheMap;
private int id;
private String name;
public static Category getCategory(int id) {
init();
return cacheMap.get(id);
}
public static Map<Integer, Category> getCategoryMap() {
init();
return cacheMap();
}
private init() {
if ( cacheMap != null ) return;
// the code to load category from datebase
// 在这里为了演示的需要,使用以下代码
cacheMap = new HashMap<Integer, Category>();
Category category = new Category();
category.setId(1);
category.setName("Fiction");
cacheMap.put(1, category);
category = new Category();
category.setId(2);
category.setName("Cartoon");
}
}
public class BookAction {
Book book;
public String execute() {
book = new Book();
book.setId(1);
book.setName("Thinking in java");
book.setCategoryId(1);
bookList.add(book);
return SUCCESS;
}
}
JSP:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<s:head />
</head>
<body>
<table border="1">
<tr>
<td>
<s:text name="page.label.userName" />
</td>
<td>
<s:property value="book.name" />
</td>
</tr>
<tr>
<td>
<s:text name="page.label.category" />
</td>
<td>
<s:property value="@com.demo.Category@getCategory(book.categoryId).getName()"/></td>
</tr>
</body>
</html>
发表评论
-
Struts2.1.8升级到Struts2.3.15.1的时候遇到了问题
2013-08-09 10:14 2012我把原来的Struts2.1.8升级到Struts2.3. ... -
struts2 url传值中文乱码解决方案
2012-09-21 16:21 1419HttpServletRequest request = Ac ... -
使用struts2中的ognl表达式调用类方法
2012-04-19 09:35 1367struts标签中value都会被解析,如,<s:pro ... -
Struts2 get 传值乱码过滤器配置
2012-04-15 16:31 1375package cn.org.du.Encode; im ... -
struts2 url传值中文乱码解决方案
2012-04-15 15:51 1514HttpServletRequest request ... -
struts2 result type 介绍
2012-03-23 09:14 1166在默认时,<result>标签的type属性值是“ ... -
Struts2中<jsp:forward page="xxx.action"></jsp:forward>失效
2012-03-08 17:43 1956问题:在Struts2中<jsp:forward pag ... -
Struts2整合Spring、JPA
2012-02-27 09:46 1919一直觉得JPA很神秘,最近抽空看了下,下面贴出刚才做的St ... -
JAVA三大框架的各自作用
2011-11-25 00:04 3199一、Spring Spring是 ... -
使用SSH到底是为了快速开发,还是为了标准?
2011-11-25 00:00 2471使用SSH到底是为了快速开发,还是为了标准? 使用S ... -
Struts2、Spring、Hibernate 高效开发的最佳实践
2011-11-26 00:16 1269引言 SSH(Struts2+Spring+Hi ... -
Struts2与urlrewrite整合
2011-11-24 00:15 3349Struts2与URL Rewrite整合注意的地方 ... -
SiteMesh模板应用与struts2整合
2011-11-23 09:23 1734SiteMesh是一个非常优秀 ... -
Struts2 Convention零配置使用
2011-11-20 00:47 3399受到大环境的影响:Sping、Hibernate、Strut ... -
struts2 配置详解
2011-11-18 10:00 1664基础Constants struts.devMo ... -
在Struts 2中实现单文件上传
2011-11-12 19:43 1078实现原理 Struts 2是通过Commons Fi ... -
SSH中在Action中用Spring的aop来验证用户是否已经登录的拦截器
2011-11-12 19:45 23251.Spring的aop来验证用户是否已经登录的拦截器 ... -
Struts2拦截器
2011-11-13 10:49 10801. 理解拦截器 1.1. ... -
Struts2 将两个<sx:autocompleter/>关联起来
2011-11-13 10:50 2342本人最近两天想使用sx:autocpmpleter来实现地区的 ... -
Struts2 <sx:div/>实现页面模块异步刷新
2011-11-13 10:50 3844package lee; import com.open ...
相关推荐
这篇博客文章可能详细探讨了如何在Struts2中使用OGNL来传递和操作数据。 OGNL是Struts2的核心组件之一,它允许开发者通过简单的字符串表达式来访问和修改对象的属性,甚至可以处理复杂的对象结构。以下是一些关于...
这个“struts2-OGNL表达式测试”可能是一个测试项目或代码示例,旨在演示如何在Struts2应用中使用OGNL表达式。 OGNL是Struts2的核心组件之一,它允许开发者通过简单的字符串表达式来获取或设置对象的属性。这使得视...
本文将深入探讨如何在Struts2中有效地使用OGNL表达式。 首先,OGNL是Struts2的核心组成部分,它允许开发者在Action类和JSP页面之间灵活地传递和访问数据。在Action类中,你可以设置属性,然后在JSP页面上通过OGNL...
在Struts2中,OGNL被广泛用于视图层和控制器层之间的数据传递,以及动态方法调用。 一、OGNL基本语法 1. 访问对象属性:`对象名.属性名`。例如,`person.name` 将访问person对象的name属性。 2. 数组和集合访问:...
2、支持类静态的方法调用和值访问,表达式的格式为@[类全名(包括包路径)]@[方法名 | 值名],例如:@java.lang.String@format('foo %s', 'bar')或@tutorial.MyConstant@APP_NAME; 3、支持赋值操作和表达式串联...
#### 五、Struts2中的OGNL表达式实现机制 为了使EL表达式能够访问`ValueStack`中的数据,Struts2在`HttpServletRequest`的基础上封装了一个类——`StrutsRequestWrapper`。这个类重写了`getAttribute_r`方法,使其...
3. **动态方法调用**:OGNL支持静态方法的调用,这使得开发者能够通过OGNL表达式直接调用类的方法,而不必显式创建该类的实例。 4. **集合操作**:通过OGNL可以方便地进行集合操作,如遍历列表、筛选元素等。 ####...
在Struts2中,OGNL被用作默认的表达式语言,用于在Action类和JSP页面之间传递数据,以及在Action上下文中进行动态方法调用。 在Struts2的配置文件中,如struts.xml或struts.properties,你可以看到OGNL表达式的使用...
在Struts2中,OGNL表达式可以嵌入到各种基本标签中,如`s:textfield`, `s:property`, `s:action`等,以实现动态的数据展示和交互。例如,`<s:property value="%{#session.user.name}" />`会将session中user对象的...
本篇文章将详细探讨Struts2中的OGNL表达式语言以及标签库。 **OGNL(对象图导航语言)** OGNL是一种强大的表达式语言,它允许开发者通过简洁的语法来访问和操作对象的属性。在Struts2框架中,OGNL扮演着至关重要的...
- 在Struts2的Action类中,可以使用OGNL表达式来动态地处理请求参数,如`String name = (String)params.get("user.name");` - 在JSP页面上,使用OGNL标签显示和处理数据,如`管理员界面</s:if>`。 通过理解并熟练...
在Struts2中,OGNL不仅用于数据获取,还支持方法调用。你可以直接在表达式中调用对象的方法,如`user.login()`,这将在运行时执行`login()`方法。 除了基本操作,OGNL还提供了许多高级特性,如条件表达式(`#{...
- **#**:通常用于表示OGNL表达式,在Struts2中作为OGNL表达式的开头标记。 - **%**:用于指定JSP页面的编码格式,如`;charset=utf-8" pageEncoding="utf-8" %>`。 - **$**:在JSP页面中表示EL表达式的开头,但在...
2. **AST节点(Abstract Syntax Tree Nodes)**:这些是解析过程的产物,每个节点代表OGNL表达式的一部分,如对象引用、属性访问或方法调用。 3. **值解析器(ValueResolver)**:负责实际的对象属性访问和方法调用...
### JS:ognl表达式详解 #### 一、OGNL表达式概述 OGNL (Object-Graph Navigation Language) 是一种强大的表达式语言,用于获取和设置 Java 对象的属性。它最初是由 John Rose 和 Luke Blanshard 开发,并被广泛...
在Struts2中,OGNL表达式通常与Struts标签结合使用,如`s:property`标签,用于显示对象的属性值。例如,`<s:property value="name"/>`将显示栈顶对象的"name"属性值。栈顶对象是指在ValueStack(值栈)中位于最顶层...
OGNL表达式提供了简洁的语法来访问和操作对象图,支持对象方法的调用、集合的选择和过滤、字符串格式化、基本类型和运算符的操作。 在Struts2中,OGNL被用于处理各种对象,包括值栈(Value Stack)、请求、会话、...
### Struts2的类型转换与OGNL表达式语言 #### 一、Struts2的类型...综上所述,Struts2框架中的类型转换和OGNL表达式语言都是极为重要的特性。正确理解和运用这些特性,可以帮助开发者构建更加健壮和灵活的应用程序。
在STRUTS2中,OGNL被广泛用于视图层与模型层的数据交换,例如在jsp页面中通过request.getAttribute()获取请求参数,或者在STRUTS2标签库中,几乎所有的标签都会调用此方法来获取标签的值。当STRUTS2框架在处理这些值...
总的来说,这个案例将帮助我们理解如何在Struts2中使用OGNL表达式来实现数据的展示和操作,以及如何通过Struts2的标签库更好地利用OGNL的功能。通过学习和实践,开发者可以提高Web应用程序的可维护性和灵活性。