Java 版 (精华区)
发信人: thering (没完没了), 信区: Java
标 题: struts源码分析=====ActionMessages
发信站: 哈工大紫丁香 (2003年05月16日22:17:18 星期五), 站内信件
www.javasoft.cn
package org.apache.struts.action
package org.apache.struts.action
ActionMessages
2003-5-16日:有点累了
package org.apache.struts.action;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Iterator;
import java.util.HashMap;
import java.util.List;
封装messages的一个类,有点统一管理的感觉
public class ActionMessages implements Serializable {
public static final String GLOBAL_MESSAGE =
"org.apache.struts.action.GLOBAL_MESSAGE";
//猜想他是保存message的
protected HashMap messages = new HashMap();
//计数的东东
protected int iCount = 0;
public ActionMessages() {
super();
}
public ActionMessages(ActionMessages messages) {
super();
this.add(messages);
}
看过这个方法你就会知道struts是怎么管理message的了。 ActionMessages里面有个
实例变量messages,他存储着 ActionMessageItem类型的对象,ActionMessageItem
类型的对象有个list变量,他负责ActionMessage对象的存储,
我个人觉得有点麻烦
public void add(String property, ActionMessage message) {
// ActionMessageItem是什么?别急,后面马上就到
ActionMessageItem item = (ActionMessageItem)
messages.get(property);
List list = null;
if (item == null) {
list = new ArrayList();
item = new ActionMessageItem(list,iCount++);
messages.put(property, item);
} else {
list = item.getList();
}
list.add(message);
}
//将以有的ActionMessages内容加到this ActionMessages当中
public void add(ActionMessages messages) {
//取得messages的keyset
Iterator props = messages.properties();
while (props.hasNext()) {
String property = (String) props.next();
Iterator msgs = messages.get(property);
while (msgs.hasNext()) {
ActionMessage msg = (ActionMessage)msgs.next();
this.add(property, msg);
}
}
}
public void clear() {
messages.clear();
}
public boolean empty() {
return (this.isEmpty());
}
public boolean isEmpty(){
return (messages.isEmpty());
}
public Iterator get() {
if (messages.size() == 0) {
return (Collections.EMPTY_LIST.iterator());
}
ArrayList results = new ArrayList();
ArrayList actionItems = new ArrayList();
for (Iterator i = messages.values().iterator();
i.hasNext();) {
actionItems.add(i.next());
}
Collections.sort(actionItems, new Comparator() {
public int compare(Object o1, Object o2) {
return ((ActionMessageItem)o1).getOrder() -
((ActionMessageItem) o2).getOrder();
}
});
for (Iterator i = actionItems.iterator();i.hasNext();) {
ActionMessageItem ami = (ActionMessageItem)
i.next();
for (Iterator messages =
ami.getList().iterator();
messages.hasNext();) {
results.add(messages.next());
}
}
return (results.iterator());
}
public Iterator get(String property) {
ActionMessageItem item = (ActionMessageItem)
messages.get(property);
if (item == null) {
return (Collections.EMPTY_LIST.iterator());
} else {
return (item.getList().iterator());
}
}
public Iterator properties() {
return (messages.keySet().iterator());
}
public int size() {
int total = 0;
for (Iterator i = messages.values().iterator();
i.hasNext();) {
ActionMessageItem ami = (ActionMessageItem)i.next();
total += ami.getList().size();
}
return (total);
}
public int size(String property) {
ActionMessageItem ami = (ActionMessageItem)
messages.get(property);
if (ami == null)
return (0);
else
return (ami.getList().size());
}
//就是这个类用order和list来存储message
protected class ActionMessageItem implements Serializable {
protected List list = null;
protected int iOrder = 0;
public ActionMessageItem(List list, int iOrder) {
this.list = list;
this.iOrder = iOrder;
}
public List getList() {
return list;
}
public void setList(List list) {
this.list = list;
}
public int getOrder() {
return iOrder;
}
public void setOrder(int iOrder) {
this.iOrder = iOrder;
}
}
}
总结:这部分只需要知道它的结构就可以了,还有他的几个简单方法,如果你看着不爽,
也可以用你自己的方法实现ActionMessage的管理,作你自己的ActionMessages。
※ 来源:·哈工大紫丁香 bbs.hit.edu.cn·[FROM: 202.118.228.151]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:2.597毫秒