在选择中传播GET参数

时间:2012-01-13 13:25:50

标签: jsf-2 get richfaces

我有一个选择框,用户可以在其中选择所选的皮肤:

<h:form style="float: right;">
  <h:outputText value="Skin:&#160;" />
  <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参数(上面的代码当前所做的)的同一页面中结束?

由于

1 个答案:

答案 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;
        }