Распространение параметров GET в выборе - PullRequest
0 голосов
/ 13 января 2012

У меня есть поле выбора, в котором пользователь может выбрать нужный скин:

<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 голосов
/ 13 января 2012

Одно из решений, которое я вижу, это написать функцию javascript или jQuery, которая получает текущий URL и добавляет к нему скин. Я переписал твой код.

    <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;
        }        
...