我已经使用 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'sArrayList索引和Oli Charlesworth'sEnum的思想。
谢谢。