我有一个选择框,用户可以在其中选择所选的皮肤:
<h:form style="float: right;">
<h:outputText value="Skin: " />
<h:selectOneMenu value="#{skinBean.skin}" id="skin-selector" onchange="this.form.submit();">
<f:selectItem itemValue="DEFAULT" itemLabel="Default" />
<f:selectItem itemValue="classic" itemLabel="Classic" />
<f:selectItem itemValue="blueSky" itemLabel="Blue Sky" />
<f:selectItem itemValue="deepMarine" itemLabel="Deep Marine" />
<f:selectItem itemValue="emeraldTown" itemLabel="Emerald Town" />
<f:selectItem itemValue="japanCherry" itemLabel="Japan Cherry" />
<f:selectItem itemValue="ruby" itemLabel="Ruby" />
<f:selectItem itemValue="wine" itemLabel="Wine" />
</h:selectOneMenu>
</h:form>
此元素放置在模板中,并在每个页面上显示。
问题:
如何传播当前页面的GET参数,以便皮肤选择不会在没有任何GET参数(上面的代码当前所做的)的同一页面中结束?
由于
答案 0 :(得分:0)
我可以看到的一个解决方案是编写一个javascript或jQuery函数,它获取curent URL并将Skin附加到它。我重写了你的代码。
<h:selectOneMenu value="#{skinBean.skin}" id="skin-selector" onchange="changeSkin(this)">
function changeSkin(selectObject){
var url = location.href;
var value = selectObject.options[selectObject.selectedIndex].value;
if(url.indexOf("?") > 0 ){
var skinQIndex=url.indexOf("?skin");
var skinAIndex=url.indexOf("&skin");
if(skinQIndex > 0 ){
if(url.indexOf("&",skinQIndex+1)>0){
var str = url.substring(0,skinQIndex+1) + "skin="+value + url.substring(url.indexOf("&",skinQIndex));
url =str;
}else{
url = url.substring(0,skinQIndex+1)+ "skin="+value;
}
}else if(skinAIndex >0){
if(url.indexOf("&",skinAIndex+1)>0){
var str = url.substring(0,skinAIndex+1)+ "skin="+value + url.substring(url.indexOf("&",skinAIndex+1)) ;
url =str;
}else{
url = url.substring(0,skinAIndex+1)+ "skin="+value;
}
}else{
url = url + "&skin="+value;
}
}else{
url = url + "?skin="+value;
}
window.location.href = url;
}