OGNL学习笔记

一直不知道OGNL是个什么东西,只知道在网页中可以采用下面两种常用的方式进行输入控制:

${userName}
<s:property value="userName" />

这两种有什么区别呢?今天对照着官方文档([url]http://struts.apache.org/2.2.1/docs/ognl.html[/url])做了一个小测试:
官方文档的原文是:
The Action instance is always pushed onto the value stack. Because the Action is on the stack, and the stack is the OGNL root, [b]references to Action properties can omit the # marker[/b]. But, to access other objects in the ActionContext, we must use the # notation so OGNL knows not to look in the root object, but for some other object in the ActionContext.
大致说的是:如果我们要取的值是Action的属性,可以省略#,如果不是,需要加上#。
我做了一个测试,代码如下:
1、信息输入页面index.jsp

<form action="<%=request.getContextPath() %>/interceptor/login!login.action">
<label>用户名称:</label>
<input type="text" name="userName" id="userName" /><br/>
<label>用户密码:</label>
<input type="text" name="password" id="password" /><br/>
<input type="submit" value="提交">
</form>


2、处理输入信息的Action:

package com.interceptor.action;

import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;

public class UserAction extends ActionSupport {

private String userName;

@SuppressWarnings("unchecked")
public String login(){
Map session=ActionContext.getContext().getSession();
HttpServletRequest request = ServletActionContext.getRequest();
String password=request.getParameter("password");
session.put("password", password);
//request.setAttribute("password", password);这种方法也不能用OGNL取到值
return SUCCESS;
}

public String getUserName() {
return userName;
}

public void setUserName(String userName) {
this.userName = userName;
}


3、struts.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>
<constant name="struts.devMode" value="true" />
<constant name="struts.enable.DynamicMethodInvocation" value="true" />
<package name="interceptor" extends="struts-default" namespace="/interceptor">
<action name="login" class="com.interceptor.action.UserAction">
<result>/result.jsp</result>
</action>
</package>
</struts>


4、信息显示页:

<%@ page language="java" pageEncoding="utf-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Struts2</title>
<style type="text/css">
body{
font-size:14px;
}
</style>
</head>

<body>
<p>userName采用s:property标签:<s:property value="userName" /></p>
<p>userName采用EL表达式:${userName }</p>
<p>password采用s:property标签:<s:property value="password" /></p>
<p>password采用EL表达式:${password }</p>
</body>
</html>


5、运行结果:查看附件图片

总结:
OGNL中经常会有“#”、“%”、“$”三个符号。一般“#”都是像前文所述代表那些非值栈的对象。还有就是ognl.jsp中创建 Map对象时候用到。而“%”则是显示对象中的值。至于“$”则是用来显示属性文件中定义的值。比如某属性文件中定义了“kkk=10”则在 Struts2的struts.xml或者JSP文件中用“${kkk}”则系统会读取“10”这个值作为显示值。

需要还需要结合相关实例进行进一步的学习,下面这个网址不错,给出了OGNL的应用,很全面,需要的时候可以查阅:
[url]http://www.iteye.com/topic/646851[/url]
[url]http://www.iteye.com/topic/569156[/url]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值