我已经使用 EnumMap 和一个 Enum 类型作为它的键来实现它。我定义了一个枚举:
public enum NavigationStatus {
HOME,
PROFILE;
}
在会话中,我将当前导航的值设置为:
private NavigationStatus activeUserNavigationStatus;
public NavigationStatus getActiveUserNavigationStatus() {
return activeUserNavigationStatus;
}
public void setActiveUserNavigationStatus(NavigationStatus activeUserNavigationStatus) {
this.activeUserNavigationStatus = activeUserNavigationStatus;
}
我主要将其设置为:setActiveUserNavigationStatus(NavigationStatus.HOME);
现在菜单正在构建的地方我创建了一个 EnumMap:
EnumMap<NavigationStatus, Component[]> menuMap = new EnumMap<NavigationStatus, Component[]>(NavigationStatus.class);
并向其中添加了元素,例如:
menuMap.put(NavigationStatus.HOME, new Component[] { homeContainer, home });
在链接的点击方法上,我设置了状态值:
public void onClick() {
session.setActiveUserNavigationStatus(NavigationStatus.PROFILE);
}
最后,我检查了会话中的当前值并相应地设置了 css 类:
Component[] menuComponents = menuMap.get(getSession().getActiveUserNavigationStatus());
menuComponents[0].add(new AttributeAppender("class", new Model<Serializable>(" active")));
menuComponents[1].add(new AttributeAppender("class", new Model<Serializable>(" active")));
这没有 switch 语句,并结合了JB Nizet 的ArrayList 索引和Oli Charlesworth 的Enum 的想法。
谢谢你。