public HtmlToolBar getToobar() {
Application application = FacesContext.getCurrentInstance().getApplication();
UIViewRoot viewRoot = FacesContext.getCurrentInstance().getViewRoot();
if (this.toobar == null) {
this.toobar = (HtmlToolBar) application.createComponent(HtmlToolBar.COMPONENT_TYPE);
}
// 清空toolbar
this.toobar.getChildren().clear();
PermitDAO pd = new PermitDAO();
List list = pd.findAll();
Permit pt;
MethodBinding mBinding;
// 循环放进树结构
for (int i = 0; i < list.size(); i++) {
pt = (Permit) list.get(i);
if (parm.containsKey(pt.getParentno())) {
((List) parm.get(pt.getParentno())).add(pt);
} else {
List li = new ArrayList();
li.add(pt);
parm.put(pt.getParentno(), li);
}
}
// 解开 if (parm.containsKey("-1")) {
List li = (List) parm.get("-1");
for (int i = 0; i < li.size(); i++) {
pt = (Permit) li.get(i);
HtmlDropDownMenu dm = (HtmlDropDownMenu) application.createComponent(HtmlDropDownMenu.COMPONENT_TYPE);
dm.setValue(pt.getName());
dm.setId(viewRoot.createUniqueId());
Object obj = null;
if ((obj = parm.get(pt.getNo())) != null) {
List su = (List) obj;
for (int t = 0; t < su.size(); t++) {
pt = (Permit) su.get(t);
HtmlMenuItem mi = (HtmlMenuItem) application.createComponent(HtmlMenuItem.COMPONENT_TYPE);
mi.setValue(pt.getName());
mi.setId(viewRoot.createUniqueId());
//Class[] clas={String.class};
mBinding = application.createMethodBinding("#{"+pt.getLink()+"}", null);
System.out.println(mBinding.toString());
mi.setAction(mBinding);
mi.isImmediate();
//mi.setTarget("document.mainframe");
//mi.setSubmitMode("ajax");
//System.out.println(pt.getName());
dm.getChildren().add(mi);
}
//HtmlMenuGroup hm = (HtmlMenuGroup) application.createComponent(HtmlMenuGroup.COMPONENT_TYPE);
//hm.setValue(pt);
}
toobar.getChildren().add(dm);
}
}
return toobar;
}
点击菜单跳转到本页面的一个iframe中,第一次调转是正确的,单每个菜单都点过一次,在回来点击就不正确,就会永远停留在一个页面,其他菜单都跳转不了测试了一下,发现,第一次跳转正确执行action,但是往后就会多次执行前面执行的action。
怀疑是jsf生命周期的问题,应为菜单页面没有刷新过。
Application application = FacesContext.getCurrentInstance().getApplication();
UIViewRoot viewRoot = FacesContext.getCurrentInstance().getViewRoot();
if (this.toobar == null) {
this.toobar = (HtmlToolBar) application.createComponent(HtmlToolBar.COMPONENT_TYPE);
}
// 清空toolbar
this.toobar.getChildren().clear();
PermitDAO pd = new PermitDAO();
List list = pd.findAll();
Permit pt;
MethodBinding mBinding;
// 循环放进树结构
for (int i = 0; i < list.size(); i++) {
pt = (Permit) list.get(i);
if (parm.containsKey(pt.getParentno())) {
((List) parm.get(pt.getParentno())).add(pt);
} else {
List li = new ArrayList();
li.add(pt);
parm.put(pt.getParentno(), li);
}
}
// 解开 if (parm.containsKey("-1")) {
List li = (List) parm.get("-1");
for (int i = 0; i < li.size(); i++) {
pt = (Permit) li.get(i);
HtmlDropDownMenu dm = (HtmlDropDownMenu) application.createComponent(HtmlDropDownMenu.COMPONENT_TYPE);
dm.setValue(pt.getName());
dm.setId(viewRoot.createUniqueId());
Object obj = null;
if ((obj = parm.get(pt.getNo())) != null) {
List su = (List) obj;
for (int t = 0; t < su.size(); t++) {
pt = (Permit) su.get(t);
HtmlMenuItem mi = (HtmlMenuItem) application.createComponent(HtmlMenuItem.COMPONENT_TYPE);
mi.setValue(pt.getName());
mi.setId(viewRoot.createUniqueId());
//Class[] clas={String.class};
mBinding = application.createMethodBinding("#{"+pt.getLink()+"}", null);
System.out.println(mBinding.toString());
mi.setAction(mBinding);
mi.isImmediate();
//mi.setTarget("document.mainframe");
//mi.setSubmitMode("ajax");
//System.out.println(pt.getName());
dm.getChildren().add(mi);
}
//HtmlMenuGroup hm = (HtmlMenuGroup) application.createComponent(HtmlMenuGroup.COMPONENT_TYPE);
//hm.setValue(pt);
}
toobar.getChildren().add(dm);
}
}
return toobar;
}
点击菜单跳转到本页面的一个iframe中,第一次调转是正确的,单每个菜单都点过一次,在回来点击就不正确,就会永远停留在一个页面,其他菜单都跳转不了测试了一下,发现,第一次跳转正确执行action,但是往后就会多次执行前面执行的action。
怀疑是jsf生命周期的问题,应为菜单页面没有刷新过。
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货