Web框架技术开发初级实验指导书10级(5)

2018-12-29 21:27

例子:

21

实验六:OGNL

OGNL是Object-Graph Navigation Language(对象图导航语言)的缩写,它是一种功能强大的表达式语言(Expression Language,简称为EL),通过它简单一致的表达式语法,可以存取对象的任意属性,调用对象的方法,遍历整个对象的结构图,实现字段类型转化等功能。它使用相同的表达式去存取对象的属性。 第一个例子 Index.jsp

访问属性 /ognl.action?username=u&password=p\>ognl

Ognl.xml

/ognl.jsp OgnlAction.java

public class OgnlAction extends ActionSupport {

private String password; private String username; private User user; public User getUser() { }

public void setUser(User user) { }

public String getPassword() { }

public String getUsername() { }

public void setPassword(String password) { }

public void setUsername(String username) {

this.username = username; this.password = password; return username; return password; this.user = user; return user;

22

}

}

User.java

public class User { }

此时的url:

http://localhost:8080/ognl_0100/ognl.action?username=u&password=p 值栈中的内容

    访问值栈中的:username = 访问值栈中的:password=

private int age = 8; public User() { }

public User(int age) { }

public int getAge() { }

public void setAge(int age) { }

@Override//重写toString

public String toString() { }

return \ + age; this.age = age; return age; super();

this.age = age;

[Debug]

Struts ValueStack Debug Value Stack Contents

Object com.bjsxt.struts2.ognl.OgnlAction Property Name password locale Property Value p zh_CN 23

user errors actionErrors username texts fieldErrors com.opensymphony.xwork2.DefaultTextProvider texts null {} [] u null {} null errorMessages [] actionMessages [] http://localhost:8080/ognl_0100/ognl.action?username=u&password=p&user.age=9就出来了。

在OGNL表达式的里面传参的时候必须把user.xxx 传进去,Struts才能帮我们构造user方法 只有user.xxx 传,才会构造

1).能不能不在url中传user.xxx直接在Action中直接new 出来,能不能取到user的值呢? Private User user=new User(10);

//原来初始值等于8

结论:也是可以的,因为我们new出Action,Action又new出User,当然就不为null了 2).把User()空的构造方法去掉,能不能取到user的值呢?

http://localhost:8080/ognl_0100/ognl.action?username=u&password=p&user.age=9

把User为空的构造方法去掉之后,它就没有默认为空的构造方法,别人要帮你初始化这个User的时候它确定不了应该调用哪个构造方法,所以取不到值。

java.lang.InstantiationException: com.bjsxt.struts2.ognl.User

实例化User出错,所以一般我们的Domain Model(领域模型)永远都要提供一个默认参数为空的方法;

结论:如果我的Domain Model,也就是User对象我自己没有new,也就是Action里面自己没有new,想让Struts2帮你new的时候必须要给domainModel传值,在它帮你new的过程中你的damainModel必须有一个默认为空的构造方法,否则它不知道new出哪一个。

24

OGNL_2

在原来的OgnlAction.java中增加Cat属性和get set 方法

Cat.java

public class Cat { }

Dog.java

public class Dog { }

public Dog() { }

public Dog(String name) { }

Get,set方法……..

public String toString() { }

return \ + name; super();

this.name = name;

private String name; private Dog friend; public Dog getFriend() { }

public void setFriend(Dog friend) { }

public String miaomiao() { }

return \; this.friend = friend; return friend;

为什么叫做OGNL对象图导航语言?比如说我们访问OgnlAction.java里面通过“user.age”

那么这时候如果我们想访问ognlAction里面的cat的dog该怎么写? Cat.friend.name OGNL

1. user.xxx只有传,才会构造,想初始化domain Model,可以自己new也可以传值,但这时

候必须有默认为空的构造方法。

25


Web框架技术开发初级实验指导书10级(5).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:网上阅卷注意事项

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: