下面是使用cookie保存皮肤的代码:
backbean:
@Scope(SESSION)
@Name("skinBean")
public class SkinBean {
private String skin = "blueSky";
public String getSkin() {
HttpServletRequest httpServletRequest = (HttpServletRequest) FacesContext
.getCurrentInstance().getExternalContext().getRequest();
Cookie[] cookies = httpServletRequest.getCookies();
if (cookies != null) {
for (int i = 0; i < cookies.length; i++) {
if (cookies[i].getName().equalsIgnoreCase("skin")) {
this.skin = cookies[i].getValue();
break;//只取得最后选择的皮肤
}
}
}
return skin;
}
public void setSkin(String skin) {
this.skin = skin;
HttpServletResponse httpServletResponse = (HttpServletResponse) FacesContext
.getCurrentInstance().getExternalContext().getResponse();
Cookie cookie = new Cookie("skin", skin);
cookie.setMaxAge(365);
cookie.setComment("Richfaces skin");
httpServletResponse.addCookie(cookie);
}
public void skinChangeListener(ActionEvent event){
//HtmlSelectOneMenu ss = (HtmlSelectOneMenu) event.getComponent().findComponent("selectSkin");
//String selected=ss.getValue().toString();
//this.skin=selected;
}
skin.xhtml
<h:selectOneMenu id="selectSkin" value="#{skinBean.skin}">
<f:selectItem itemLabel="Wfw" itemValue="WfwSkin" />
<f:selectItem itemLabel="Plain" itemValue="plain" />
<f:selectItem itemLabel="EmeraldTown" itemValue="emeraldTown" />
<f:selectItem itemLabel="BlueSky" itemValue="blueSky" />
<f:selectItem itemLabel="Wine" itemValue="wine" />
<f:selectItem itemLabel="JapanCherry" itemValue="japanCherry" />
<f:selectItem itemLabel="Ruby" itemValue="ruby" />
<f:selectItem itemLabel="Classic" itemValue="classic" />
<f:selectItem itemLabel="DeepMarine" itemValue="deepMarine" />
<a4j:support event="onchange" limitToList="true" actionListener="#{skinBean.skinChangeListener}" oncomplete="
window.location.href=window.location.href;
//window.location.reload(true);"
reRender="selectSkin" ajaxSingle="true">
</a4j:support>
</h:selectOneMenu>
注意:因为request和response不同步的原因,所以必须让页面刷新一次