`

struts2 ognl表达式

 
阅读更多
OGNL对象图导航语言
Object Graphic Navigation Language.
可以单独使用获取关系复杂的数据
eg:
Person p=new Person();
p.setName("张三");
p.setAddress(new Address("上海中兴区","rar"));
ognl.Ognl.setValue("Address.addr", p, "上海交通大学");
String name=(String) ognl.Ognl.getValue("Address.addr", p);
System.out.println(name);
源于ognl.jar工具包.其作用如下:
(1)对属性获取和设置
(2)调用对象方法
(3)调用静态属性和方法
(4)对集合进行过滤
(5)支持Java中的运算符,操作符
(6)定义List常量 {"tom","sun"}
(7)定义Map常量 #{"M":"男","F","女"}
struts2标签
(1) struts2使用OGNL来访问ValueStack中的信息.
a. 访问context区域内容语法以"#key"开始
b. 访问root区域内容语法为"属性名"
(2)struts2提供了很多标签,有些标签属性需要指定OGNL表达式.
a. 通用标签
debug,property,date,if...else,iterator
bean,push,action,set
b. 表单标签
form,textfield,password,checkbox,checkboxlist,radio,select,optgroup
 
思考
EL表达式为什么能获取Action对象的属性?
HttpServletRequest request;
request = new StrutsRequestWrapper(request);
request.getAttribute("user");
public class StrutsRequestWrapper extends HttpServletRequestWrapper{
public Object getAttribute(String key){
//先去request对象中寻找信息
Object obj = super.getAttribute(key);
//如果在原request中找不到,去valuestack中查找
if(obj == null){
ValueStack vs = ActionContext.getContext().getValueStack();
obj = vs.findValue(key);//"name"充当OGNL表达式,从而访问了root区域的Action对象
}
return obj;
}
 
}
 
<s:iterator value="list.{?#this.age>=18}">满足年龄大于18的子集
<s:property value="@java.lang.Math@PI" />
代码:
package testvaluestack;
 
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
 
import org.apache.struts2.ServletActionContext;
 
import bean.Address;
import bean.Person;
 
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.util.ValueStack;
 
public class teststack extends ActionSupport
{
private Date date;
private List list;
private int price;
private String sex;
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public int getPrice() {
return price;
}
public void setPrice(int price) {
this.price = price;
}
public List getList() {
return list;
}
public void setList(List list) {
this.list = list;
}
public Date getDate() {
return date;
}
public void setDate(Date date) {
this.date = date;
}
@Override
public String execute() {
// TODO Auto-generated method stub
date=new Date();
Map session=ActionContext.getContext().getSession();
session.put("ses", "haha");
Map request=(Map) ActionContext.getContext().get("request");
request.put("res", "request获取");
list=new ArrayList<Address>();
for(int i=0;i<10;i++)
{
Address address=new Address("海淀区"+i+"号","33260"+i);
list.add(address);
}
price=100000;
sex="男";
Person person=new Person();
person.setAddress(new Address("上海","332600"));
person.setName("王五");
person.setPrice(500);
//存放在栈顶的Person对象可以直接通过price获取,重名情况不好获取
ActionContext.getContext().getValueStack().push(person);
/*
* 存放在栈顶的Map 通过person.price获取
* ActionContext.getContext.getValueStack().set("person",person);
* */
System.out.println("hello");
return SUCCESS;
}
}
 
 
 
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
</head>
<body>
<s:property value="person.name"/><br />
<s:date name="date" format="yyyy-MM-dd hh:mm"/><br />
ses:<s:property value="#session.ses"/><br />
res:<s:property value="#request.res"/><br />
<ul>
<s:iterator value="list" var="er" status="status">
<li><s:property value="#status.count"/>.<s:property value="#er.addr"/></li>
</s:iterator>
</ul>
<s:property value="price"/>
<s:if test="price>100000">太贵了</s:if>
<s:else>太便宜了</s:else>
<br />
<s:if test='sex.equals("男")'>男性</s:if>
<s:else>女性</s:else><br />
<s:property value="address.addr"/>
<s:debug></s:debug><br />
</body>
</html>
<s:form action="form" namespace="/" theme="simple">//不需要是form提供的主题
用户名:<s:textfield name="name"></s:textfield>
<br />
密码:<s:password name="passwd" showPassword="true"></s:password>//回显时默认是不显示密码的
<br />
年龄:<s:textfield name="age"></s:textfield>
<br />
Email:<s:textfield name="Email"></s:textfield>
<br />
性别:<s:radio list='#{"M":"男","FM":"女"}' name="sex"></s:radio><br />//list还可以是Map List(后面跟listkey和listvalue List<Sex>)
爱好:<s:checkboxlist list="#request.likes" name="mylikes"></s:checkboxlist><br />//封装成数组交给bean数据库存字符串
兴趣:<s:select headerKey="-1" headerValue="--请选择--"list="#request.likes" name="dds"></s:select><br />
<s:submit value="提交"></s:submit>
</s:form>



<s:form action="sample02" theme="simple">
<s:bean name="tarena.action.ModelBean" var="data"></s:bean>
请选择朋友:<s:select name="friend" list="{}">
<s:optgroup label="男性" list="#data.males" listKey="name" listValue="name"></s:optgroup>//带分组的选择
<s:optgroup label="女性" list="#data.females" listKey="name" listValue="name"></s:optgroup>
</s:select> <br>
姓名:<s:textfield name="name"></s:textfield><br/>
密码:<s:password name="pwd" showPassword="true"></s:password><br/>
年龄:<s:textfield name="age"></s:textfield><br/>
Email:<s:textfield name="email"></s:textfield><br/>
性别:<s:radio list='#{"M":"男","F":"女"}' name="sex"></s:radio><br/>
是否已婚:<s:checkbox name="marry"></s:checkbox><br/>
 
个人爱好:<s:checkboxlist name="myloves" list="#data.loves" listKey="key" listValue="value"></s:checkboxlist>
<br/>
<s:radio name="mylove" list="#data.loves" listKey="key" listValue="value"></s:radio>
<br/>
爱好:
<s:select name="mylove" emptyOption="true" headerKey="-1" headerValue="--请选择--" list="#data.loves" listKey="key" listValue="value">
</s:select>
 
</s:form>
 
分享到:
评论

相关推荐

    struts2 OGNL表达式

    Struts2 OGNL表达式是Java开发中一个重要的知识点,尤其在Web应用程序设计中扮演着核心角色。OGNL(Object-Graph Navigation Language)是一种强大的表达式语言,它被Struts2框架广泛用于视图层与模型层之间的数据...

    struts2 OGNL表达式使用

    struts2 OGNL表达式使用 OGNL(Object-Graph Navigation Language)是对象图导航语言,允许开发者在Struts2应用程序中访问和操作对象及其属性。下面是OGNL表达式的使用方法: 访问基本属性 1. 访问值栈中action的...

    struts2 OGNL 表达式及各种标签的使用

    - 在Struts2的Action类中,可以使用OGNL表达式来动态地处理请求参数,如`String name = (String)params.get("user.name");` - 在JSP页面上,使用OGNL标签显示和处理数据,如`管理员界面&lt;/s:if&gt;`。 通过理解并熟练...

    Struts2 使用OGNL表达式

    以下是一些关于Struts2中OGNL表达式的关键知识点: 1. **基础语法**:OGNL表达式的格式通常为`object.property`或`object[index]`,用于访问对象的属性或数组/集合的元素。例如,`user.name`将获取名为`user`的对象...

    struts2 中 OGNL表达式的使用

    struts2 中 OGNL表达式的使用struts2 中 OGNL表达式的使用

    struts2OGNL表达式ActionContext及valuesStack.pdf

    在Struts2中,OGNL表达式的使用大大提升了代码的可读性和维护性。 首先,`#`字符在OGNL中扮演着关键角色。它主要用于访问OGNL上下文和Action上下文。`#`前缀可以用来获取`ActionContext`,这包含了四个重要的域:...

    Struts2 OGNL表达式实例详解

    Struts2 OGNL表达式实例详解 Struts2 OGNL表达式实例详解主要介绍了Struts2 OGNL表达式实例详解,相关实例代码,需要的朋友可以参考。Object Graph Navigation Language(对象图导航语言),就是用点来访问成员变量...

    ognl表达式 ognl表达式

    在Struts2框架中,OGNL表达式被广泛应用于视图层,比如在JSP页面中用来获取数据。OGNL表达式的语法简洁明了,例如: - **直接调用方法**:`xxx.sayHello()`。 - **访问静态方法和常量**:`@java.lang.String@format...

    Struts2 如何使用OGNL表达式(三十八)

    本文将深入探讨如何在Struts2中有效地使用OGNL表达式。 首先,OGNL是Struts2的核心组成部分,它允许开发者在Action类和JSP页面之间灵活地传递和访问数据。在Action类中,你可以设置属性,然后在JSP页面上通过OGNL...

    ognl表达式java使用案例详解(测试通过)

    Struts 2默认的表达式语言是OGNL,原因是它相对其它表达式语言具有下面几大优势: 1、 支持对象方法调用,如xxx.doSomeSpecial(); 2、支持类静态的方法调用和值访问,表达式的格式为@[类全名(包括包路径)]@...

    struts2-OGNL表达式测试

    这个“struts2-OGNL表达式测试”可能是一个测试项目或代码示例,旨在演示如何在Struts2应用中使用OGNL表达式。 OGNL是Struts2的核心组件之一,它允许开发者通过简单的字符串表达式来获取或设置对象的属性。这使得视...

    Struts2深入学习----OGNL表达式原理

    Struts2是一个流行的Java Web...通过深入学习OGNL表达式原理,开发者能够更好地利用Struts2框架,提高Web应用的开发效率和可维护性。对于那些希望在Struts2开发中更进一步的人来说,熟悉和掌握OGNL是必不可少的技能。

    Struts2的标签库及OGNL表达式语言

    本篇文章将详细探讨Struts2中的OGNL表达式语言以及标签库。 **OGNL(对象图导航语言)** OGNL是一种强大的表达式语言,它允许开发者通过简洁的语法来访问和操作对象的属性。在Struts2框架中,OGNL扮演着至关重要的...

    JS:ognl表达式

    - **框架集成**:许多 Java 框架,如 Struts2、Hibernate Validator 等,都集成了 OGNL 表达式用于数据绑定和验证。 - **模板引擎**:在模板引擎中使用 OGNL 表达式来动态渲染页面。 - **业务逻辑处理**:在复杂的...

    OGNL表达式

    - **#**:通常用于表示OGNL表达式,在Struts2中作为OGNL表达式的开头标记。 - **%**:用于指定JSP页面的编码格式,如`;charset=utf-8" pageEncoding="utf-8" %&gt;`。 - **$**:在JSP页面中表示EL表达式的开头,但在...

    struts2_OGNL表达式ActionContext及valuesStack

    本文将深入探讨Struts2中的OGNL表达式,ActionContext以及valuesStack。 首先,OGNL表达式是Struts2中不可或缺的一部分,它允许开发者以一种声明式的方式访问和修改对象的属性。比如,`myBean.getMyProperty()`这样...

    struts2中ognl表达式的理解和用法

    3. 结果类型配置:在Struts2的配置文件中,结果类型可以通过OGNL表达式动态决定,例如,`resultType="#attr.resultType"`。 4. JSP标签库:Struts2提供了丰富的JSP标签库,这些标签内部也大量使用了OGNL来获取和显示...

    精通struts2的ognl表达式

    ### 精通Struts2中的OGNL表达式 在深入探讨Struts2框架的核心功能时,理解并熟练掌握OGNL(Object-Graph Navigation Language)表达式的应用是至关重要的一步。OGNL是一种强大的表达式语言,它允许开发者通过简洁、...

    struts2 ognl的用法

    在Struts2中使用OGNL表达式主要涉及以下几种符号:“#”、“%”和“$”。 ##### 1. “#”符号的使用 - **访问Struts2上下文**: - `#`可用于访问当前的`ActionContext`,如`#ActionContext.getContext()`。 - ...

Global site tag (gtag.js) - Google Analytics