仅在控制器中看到的不在视图中的grails中的params更改

时间:2013-05-06 08:35:16

标签: model-view-controller grails params

我的部分UrlMappings看起来像这样:

"/$lang"(controller: "main", action: "front") {
        constraints {
            lang inList: ['hr', 'sl', 'si']
        }
    }

因为我想将lang设置为'sl',如果它是'si',我创建了以下过滤器:

def filters = {
    all(controller: '*', action: '*') {
        before = {
            if(params.lang == 'si') {
                params.lang = 'sl'
            }
        }
    }
}

问题:控制器内的params.lang获取所需值('sl'),但在视图中,params.lang被解析为原始值('si')。你有什么建议来解决这个问题?

谢谢!

1 个答案:

答案 0 :(得分:0)

尝试使用重定向。我这样做了:

def filters = {
        pages(controller: 'pages', action: 'home|services|projects|project_details|contact_us|career|about_us|downloadCaseStudy') {
            before = {
                if (params.lang) {
                    if (!(params.lang in grailsApplication.config.i18nFields.locales)) {
                        session."$SessionLocaleResolver.LOCALE_SESSION_ATTRIBUTE_NAME" = null
                        params.remove('lang')
                        response.sendError(404)
                        return
                    }
                    if (params.lang == grailsApplication.config.defaultLocale) {
                        RCU.getLocaleResolver(request).setLocale(request, response, new Locale(params.lang))
                        params.remove('lang')
                        chain(controller: "pages", action: params.action, model:chainModel?:[:],params: params)
                        return false
                    }
                } else {
                    String langCode = RCU.getLocale(request).getLanguage()
                    if (!(langCode in grailsApplication.config.i18nFields.locales)) {
                        params.lang = grailsApplication.config.defaultLocale
                        return
                    } else if (langCode != grailsApplication.config.defaultLocale) {
                        params.lang = langCode
                        chain(controller: params.controller, action: params.action, model:chainModel?:[:], params: params)
                    }
                    return true
                }
            }
            after = { Map model ->

            }
            afterView = { Exception e ->

            }
        }

一点解释:我建立了像 / ru / about_us 这样的网址。
1.如果不在列表中 - 404.
2.if lang = grailsApplication.config.defaultLocale show而不是 / en / about_us 只是 / about_us
3.如果没有提供lang param - 请求解决。