2013-05-06 53 views
1

部分看起来像这样的Grails PARAMS过滤:更改仅见于控制器没有意见我UrlMappings的

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

问题:params.lang内部控制器获取想要的值( 'SL'),但在观点,params.lang得到解决原值( 'SI')。你会建议如何解决这个问题?

谢谢!

回答

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.如果LANG = grailsApplication.config.defaultLocale显示,而不是/EN/about_us只是/about_us
3.如果没有提供lang参数 - 从请求中解析。