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

How to retain dropdown selection in grails after page refresh?

本文关键字:保留 选择 grails 刷新      更新时间:2024-01-11

我知道已经有一些关于保留下拉选择的问题,但请不要关闭这个问题。

我有一个带有语言下拉列表的登录页面。用户选择一种语言,页面将使用新语言刷新。当然,选择会消失,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参数保持为空。

请帮忙。谢谢

只需给select控件一个id,从查询字符串中读取lang值&将其设置为select控件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>

非常简单

在grails控制器中使用Ajax和Session variable。。。

ajax函数jquery on更改下拉框上的函数

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

阿罗哈!!!