如何在页面刷新后保留grails中的下拉选择?

时间:2013-12-02 10:10:51

标签: javascript grails

我知道已经存在一些关于下拉选择保留的问题,但请不要关闭此选项。

我有一个带语言下拉列表的登录页面。用户选择一种语言,并使用新语言刷新页面。当然,选择将消失,并且lang参数不会移动到整个应用程序。主页打开时使用默认语言,而不是用户想要的语言。

这是我的代码:

.gsp文件

    <g:select style="width: 60px; background-color: transparent; border: 0px;" 
    onchange="goToPage(this.value)" name="lang"              
    from="${LangCodeBook.list()}" value="" noSelection="['':'...']">
    </g:select>


    <script type="text/javascript">

       function goToPage(lang){
   if(lang=='GER'){ 
           window.location.href = "?lang=de_DE";
   }
   else if(lang=='RUS'){ 
           window.location.href = "?lang=ru_RU";
   }
   else if(lang=='ENG'){ 
           window.location.href = "?lang=en_GB";
   }
     }
   </script>

另一方面是MyEventListener.groovy,他将所有参数(用户名,密码,lang)保存到对象中。

        def paramObject=RequestContextHolder.currentRequestAttributes().getParams()

问题是lang param保持空白。

请帮忙。 感谢。

2 个答案:

答案 0 :(得分:0)

只需给选择控件id,从查询字符串&amp;中读取lang值。将其设置为select control onload的选定值,如下所示。

<强> document.getElementById('lang').value= getParameterByName("lang");

<g:select style="width: 60px; background-color: transparent; border: 0px;" 
    onchange="goToPage(this.value)" name="lang" id="lang" 
    from="${LangCodeBook.list()}" value="" noSelection="['':'...']">
    </g:select>


    <script type="text/javascript">
       document.getElementById('lang').value= getParameterByName("lang");
       function goToPage(lang){
       if(lang=='GER'){ 
           window.location.href = "?lang=de_DE";
       }
       else if(lang=='RUS'){ 
           window.location.href = "?lang=ru_RU";
       }
       else if(lang=='ENG'){ 
           window.location.href = "?lang=en_GB";
       }
     }
     function getParameterByName(name) {
     name = name.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]");
     var regexS = "[\\?&]" + name + "=([^&#]*)";
     var regex = new RegExp(regexS);
     var results = regex.exec(window.location.search);
     if (results == null) return "";
     else return decodeURIComponent(results[1].replace(/\+/g, " "));
     }
   </script>

答案 1 :(得分:0)

非常简单

在grails控制器中使用Ajax和Session varible ......

ajax函数jquery on the change function on the down down box

<g:javascript>
        function onChange(){
        //id = $this.value;
        $.ajax({ 
        context: $(this),
        url:"${resource()}"+"/yourLanagueController/yourSelectionHolderAction",                             type:"POST",
        data:{"dropdownboxid":id}
        });
        }
        </g:javascript>

您的控制器和会话变量

在登录页面上的某些地方使会话变为null;

`def session.selectedlanagueid = null`

def yourSelectionHolderAction(params){

 //always hold one ID only so when u
//set session varible make to null first then add
            session.selectedlanagueid = null 
        if(params.id)
                 session.selectedlanagueid = id;

        render 'test' // or '' // or any valid json render result
    }

ALLOHA !!!