OGNL(Object Graph Navigation Language),是一种表达式语言。使用这种表达式语言,你可以通过某种表达式语法,存取Java对象树中的任意属性、调用Java对象树的方法、同时能够自动实现必要的类型转化。如果我们把表达式看做是一个带有语义的字符串,那么OGNL无疑成为了这个语义字符串与Java对象之间沟通的桥梁。

 

 

 

 

 

 

 

 

 

 

 

 

 

   #符号的三种用法

   1)访问非根对象属性,例如示例中的#session.msg表达式,由于Struts 2中值栈被视为根对象,所以访问其他非根对象时,需要加#前缀。实际上,#相当于ActionContext. getContext();#session.msg表达式相当于ActionContext.getContext().getSession(). getAttribute("msg") 。

   2)用于过滤和投影(projecting)集合,如示例中的persons.{?#this.age>20}。

   3) 用来构造Map,例如示例中的#{'foo1':'bar1', 'foo2':'bar2'}。

 

 

%符号

      %符号的用途是在标志的属性为字符串类型时,计算OGNL表达式的值。如下面的代码所示:

<h3>构造Map</h3>

    <s:set name="foobar" value="#{'foo1':‘OGNL1', 'foo2':'OGNL2'}" />

    <p>The value of key "foo1" is <s:property value="#foobar['foo1']" /></p>

    <p>不使用%:<s:url value="#foobar['foo1']" /></p>

   <p>使用%:<s:url value="%{#foobar['foo1']}" /></p>

运行界面如下所示。

he value of key "foo1" is OGNL1

不使用%:#foobar['foo1']

使用%:OGNL1

 

$符号主要有两个方面的用途

     1) 在国际化资源文件中,引用OGNL表达式,例如国际化资源文件中的代码:reg.agerange=国际化资源信息:年龄必须在${min}同${max}之间。

     2) 在Struts 2框架的配置文件中引用OGNL表达式

 

 

 

 

 

 

OGNL使用时需要有set方法

在action中  例如注册 获取jsp表单中的数据

那么在表单中应该这样写  <input   type="text" name=实体类名.属性名 />

在action中完善注册信息

添加表单中所没有的信息  例如注册时的状态 0 未激活  1 已激活 

private string state;

然后添加set注入方法

在action的registeraction中进行完善

 

 

 

 

 

 

谢谢各位大大指导和补充