myfaces在pageContent中模拟了一个堆栈,采取先进后出的原则,
//进堆栈
private void pushTag() {
List list = (List) pageContext.getAttribute(COMPONENT_STACK_ATTR,
PageContext.REQUEST_SCOPE);
if (list == null) {
list = new ArrayList();
pageContext.setAttribute(COMPONENT_STACK_ATTR, list,
PageContext.REQUEST_SCOPE);
}
list.add(this);
}
//出堆栈
private void popTag() {
List list = (List) pageContext.getAttribute(COMPONENT_STACK_ATTR,
PageContext.REQUEST_SCOPE);
if (list != null) {
int size = list.size();
list.remove(size - 1);
if (size <= 1) {
pageContext.removeAttribute(COMPONENT_STACK_ATTR,
PageContext.REQUEST_SCOPE);
}
}
}
这样,在页面上组件可以方便的取得父组件,然后进行父子关系的建立
public static UIComponentTag getParentUIComponentTag(PageContext pageContext) {
List list = (List) pageContext.getAttribute(COMPONENT_STACK_ATTR,
PageContext.REQUEST_SCOPE);
if (list != null) {
return (UIComponentTag) list.get(list.size() - 1);
}
return null;
}
最近学习myfaces的源码,有兴趣的大家一起交流,哈哈
msn : wzhj2005@hotmail.com