我是JSF 2.0的新手,并尝试将面板菜单项动态渲染到我的xhtml页面中。 例如:
Header_1
|---SubHeader_1
| |----Item_1.1
| |----Item_1.2
| |----Item_1.3
|---SubHeader_2
| |----Item_2.1
| |----Item_2.2
我想在数据库Item_1.x
中动态加载Item_2.x
,home.xhtml
。请提供宝贵的建议,我该怎么做。
答案 0 :(得分:3)
您可以尝试以下代码:希望这会对您有所帮助 -
菜单项的数据由MenuItem类
表示public class MenuItem {
private int id;
private String label;
public MenuItem(String label, int id) {
super();
this.label = label;
this.id = id;
}
public int getId() {
return this.id;
}
public String getLabel() {
return this.label;
}
public void setId(int id) {
this.id = id;
}
public void setLabel(String label) {
this.label = label;
}
@Override
public String toString() {
StringBuilder builder = new StringBuilder();
builder.append("MenuItem [id=");
builder.append(this.id);
builder.append(", label=");
builder.append(this.label);
builder.append("]");
return builder.toString();
}
}
DynamicMenu类支持动态菜单。它提供了菜单项列表和操作方法:
import java.util.ArrayList;
import java.util.List;
import org.apache.log4j.Logger;
import org.jboss.seam.annotations.Name;
@Name("dynMenu")
public class DynamicMenu {
private Logger log = Logger.getLogger(DynamicMenu.class.getName());
public void action(int id) {
log.info("Action called with menu item id: " + id);
}
public List<menuitem> getMenuItems() {
List<menuitem> menuItems = new ArrayList<menuitem>();
menuItems.add(new MenuItem("Menu Item #1", 1));
menuItems.add(new MenuItem("Menu Item #2", 2));
menuItems.add(new MenuItem("Menu Item #3", 3));
return menuItems;
}
}
以下代码段包含动态菜单xhtml示例。动态菜单项中的键是<c:forEach>
迭代器。名称空间声明非常重要,它应该是xmlns:c="http://java.sun.com/jstl/core"
。如果你使用xmlns:c="http://java.sun.com/jsp/jstl/core"
命名空间,那么迭代器就不会工作了!
<h:form xmlns:h="http://java.sun.com/jsf/html">
<rich:dropDownMenu value="Dynamic Menu Item Example" style="text-decoration:none;">
<c:forEach xmlns:c="http://java.sun.com/jstl/core" var="item"
items="#{dynMenu.getMenuItems()}">
<rich:menuItem id="menuItem#{item.id}" submitMode="ajax"
value="#{item.label}" action="#{dynMenu.action(item.id)}">
</rich:menuItem>
</c:forEach>
</rich:dropDownMenu>
</h:form>