2014-01-18 5 views
0

В контроллере и GSP есть имеющиеся две переменные:Grails: POST или GET HttpRequest Params только

  • params - Tahat содержит карту всех Params (как GET из строки запроса и POST из форм)
  • request - HttpServletRequest объект

Как я могу получить только параметры POST или GET (строка запроса) только параметры? Мне нужны оба типа параметров, но на разных картах.

Я знаю, что объект HttpServletRequest содержит информацию о Query String, но я ищу решение без реализации парсера строки запроса.

ответ

1

Я решил эту проблему, разобрав строку запроса с org.codehaus.groovy.grails.web.util.WebUtils, а затем я поместил эти данные в атрибут HttpServletRequest.

Теперь я могу использовать request.getAttribute('paramsGet') или request.getAttribute('paramsPost').

Grails фильтры был очень полезным, так:

package com.selly.filters 

import org.codehaus.groovy.grails.web.util.WebUtils 

class ParamsFilters { 

    List globalParams = [ 
     "controller", 
     "action", 
     "format" 
    ] 

    def filters = { 
     all(controller:'*', action:'*') { 
      before = { 
       Map paramsRequest = params.findAll { 
        return !globalParams.contains(it.key) 
       } 

       Map paramsGet = WebUtils.fromQueryString(request.getQueryString() ?: "") 
       Map paramsPost = paramsRequest.minus(paramsGet) 

       request.setAttribute('paramsGet', paramsGet) 
       request.setAttribute('paramsPost', paramsPost) 

       //println request.getAttribute('paramsGet') 
       //println request.getAttribute('paramsPost') 
      } 
      after = { Map model -> 

      } 
      afterView = { Exception e -> 

      } 
     } 
    } 
} 
0

Даже с Grails вы работаете с сервлетами, которые смешивают POST и GET. И я не помню, чтобы что-то видел (кроме репарации строки запроса), которая поможет вам.

+0

мне удалось решить эту проблему. К сожалению, с помощью строки запроса синтаксического анализа. – Athlan