1. 环境
JDK 1.6, JSF 1.2, Richfaces 3.2.2 GA, JSTL 1.2, Tomcat 6.0
2. 实现
Backing Bean:
package com.apple.www.beans;
import java.util.ArrayList;
import java.util.List;
public class DynamicMenuBean {
public class FakeData {
private String label;
private String icon;
private String action;
public String getLabel() {
return label;
}
public void setLabel(String label) {
this.label = label;
}
public String getIcon() {
return icon;
}
public void setIcon(String icon) {
this.icon = icon;
}
public String getAction() {
return action;
}
public void setAction(String action) {
this.action = action;
}
public FakeData(String label, String icon, String action) {
this.label = label;
this.icon = icon;
this.action = action;
}
}
private String currentAction;
public void setCurrentAction(String currentAction) {
this.currentAction = currentAction;
}
public String getCurrentAction() {
return currentAction;
}
public List getFakeData() {
// 从数据库或其他地方获取动态菜单的List
List<FakeData> fakeData = new ArrayList<FakeData>();
fakeData.add(new FakeData("menu1", "icon1", "action1"));
fakeData.add(new FakeData("menu2", "icon2", "action2"));
fakeData.add(new FakeData("menu3", "icon3", "action3"));
fakeData.add(new FakeData("menu4", "icon4", "action4"));
fakeData.add(new FakeData("menu5", "icon5", "action6"));
return fakeData;
}
public String excuteMenuAction() {
// TODO Something here
return currentAction;
}
}
JSP Page:
<%@taglib prefix="f" uri="http://java.sun.com/jsf/core"%> <%@taglib prefix="h" uri="http://java.sun.com/jsf/html"%> <%@taglib uri="https://ajax4jsf.dev.java.net/ajax" prefix="a4j"%> <%@taglib uri="http://richfaces.ajax4jsf.org/rich" prefix="rich"%> <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <---------------省略---------------> <rich:dropDownMenu value="Popup"> <c:forEach items="#{dynamicMenuBean.fakeData}" var="menu"> <rich:menuItem icon="#{menu.icon}" value="#{menu.label}" immediate="true" action="#{dynamicMenuBean.excuteMenuAction}" submitMode="server"> <f:setPropertyActionListener target="#{dynamicMenuBean.currentAction}" value="#{menu.action}" /> </rich:menuItem> </c:forEach> </rich:dropDownMenu> <---------------省略--------------->
PS: 略去Backing bean和navigation的配置