struts2 之四:OGNL表达式

前言

OGNL表达式的全称是 Object Graph Navigation Language,即 对象图导航语言,使用OGNL表达式可以使用简单的语法设置以及读取java对象的值

一般,  注意: value里的内容称为ognl表达式,由于其功能强大,涉及东西太多,只做部分总结

下面就先模拟一个案例,首先需要几个模拟的对象类
首先是Dog类

1
2
3
4
5
6
7
8
9
private String name;
public Dog(String name){
this.name=name;
}
public Dog(){}
此处省略set。。get方法

然后是Cat类

1
2
3
4
5
6
7
8
private Dog friend;
public String miaomiao()
{
return "miaomiao";
}
此处省略set。。get方法

接着是user类

1
2
3
4
5
6
7
8
9
private String msg;
public user(){}
public user(String msg){
this.msg=msg;
}
此处省略set。。get方法

在配置文件中,仍然不变

1
2
3
4
5
6
7
8
<package name="default" namespace="/" extends="struts-default">
<global-results>
<result name="success">/success.jsp</result>
</global-results>
<action name="ognlaction" class="com.zwl.action.ognlaction">
</action>

下面是action,思路是在action中一点一点加入模拟代码,在相应的jsp中将值回显出来

1
2
3
4
5
6
7
public class ognlaction extends ActionSupport{
private String username;
public String execute() throws Exception {
// TODO Auto-generated method stub
return super.execute();
}

下面所以属性的set与get方法都将省略。。
首先是验证普通属性,对应jsp页面为

1:

  • 访问值栈中的action的普通属性:
  • username =

    2:访问值栈中对象的普通属性(get set方法):

    首先action增加 private user use;
    对应jsp为:

    3访问值栈中对象中的成员对象的普通属性(get set方法)

    首先action增加:private Cat cat;
    对应jsp为:

    4访问值栈中对象的普通方法

    5访问值栈中action的普通方法
    首先action增加:public String m() {
    return “hello”;}
    对应jsp为:

    6 OGNL表达式语言访问静态方法,需要在Struts2.xml配置文件如下:

    1
    2
    <constant name="struts.ognl.allowStaticMethodAccess" value="true"></constant>

    首先增加一个pojo类:

    1
    2
    3
    4
    5
    public class s {
    public static String STR = "STATIC STRING";
    public static String s() {
    return "static method"; }}

    对应jsp:

    1
    2
    3
    4
    <li>访问静态方法:<s:property value="@com.zwl.pojo.s@s()"/></li>
    <li>访问静态属性:<s:property value="@com.zwl.pojo.s@STR"/></li>
    <li>访问Math类的静态方法:<s:property value="@@max(2,3)" /></li>

    注意使用@符号访问

    7访问List中元素某个属性的集合中的特定值:
    首先action增加

    1
    2
    3
    4
    5
    6
    private List<user> users=new ArrayList<>();
    public ognlaction(){
    users.add(new user("1"));
    users.add(new user("2"));
    users.add(new user("3"));
    }

    对应jsp为:

    8:访问Set中某个元素
    首先action增加:

    private Set dogs = new HashSet();

    对应jsp为:

    9:访问Map中某个元素
    首先action增加:

    private Map dogMap = new HashMap();

  • 访问Map中某个元素:

  • 访问Map中所有的key:

  • 访问Map中所有的value:
  • 10:调试:
    主要用来查看值栈。而值栈主要来存放对象的,类似于正常的栈,

    以下为部分结果截图:
    Alt text

    热评文章