2010-05-22 17 views
5

Yapmak istediğim, denetleyicideki @RequestParam yöntemini kullanarak bir haritayı geçirmektir, ancak çalışmıyor gibi görünüyor. Bu, Struts 2'de değer bağlaması olarak çalışırken. JSP ise JQuery kullanarak: AşağıdaSpring MVC - İstek parametrelerini Harita parametresi olarak eşleştirilemiyor mu?

ben çalışıyorum budur

var order = {}; 
order['seq'] = "ASC"; 
var criteria = {}; 
criteria['label'] = "Directory"; 

$.post(context + 'menu/list', 
    {"orders" : order, 
    "criterias" : criteria} 

ben göndermek için çalışıyorum parametreler menüsüne bir girişe ilişkin 'harita' nesne düzen ve kriteridir. Java'da : Bir harita init için kullanılabilir

Criteria: {criterias[label]=Directory, orders[seq]=ASC} 
Order: {criterias[label]=Directory, orders[seq]=ASC} 

Baharda @RequestParam Can: Ben haritası kriterlerini Java & düzen çıktısını Ancak

@RequestMapping("/{collection}/list") 
public @ResponseBody Map<String, ? extends Object> list(@PathVariable String collection, 
     @RequestParam("criterias") Map<String, String> criteria, 
     @RequestParam("orders") Map<String, String> order) { 

, aşağıda gibi tüm değerini alır parametre?

cevap

4

Tamam. Sebebini buluyor gibi görünüyor. HandlerMethodInvoker.java yılında

@SuppressWarnings("unchecked") 
private Object resolveRequestParam(String paramName, boolean required, String defaultValue, 
     MethodParameter methodParam, NativeWebRequest webRequest, Object handlerForInitBinderCall) 
     throws Exception { 

    Class<?> paramType = methodParam.getParameterType(); 
    if (Map.class.isAssignableFrom(paramType)) { 
     return resolveRequestParamMap((Class<? extends Map>) paramType, webRequest); 
    }} 


private Map resolveRequestParamMap(Class<? extends Map> mapType, NativeWebRequest webRequest) { 
    Map<String, String[]> parameterMap = webRequest.getParameterMap(); 
    if (MultiValueMap.class.isAssignableFrom(mapType)) { 
     MultiValueMap<String, String> result = new LinkedMultiValueMap<String, String>(parameterMap.size()); 
     for (Map.Entry<String, String[]> entry : parameterMap.entrySet()) { 
      for (String value : entry.getValue()) { 
       result.add(entry.getKey(), value); 
      } 
     } 
     return result; 
    } 
    else { 
     Map<String, String> result = new LinkedHashMap<String, String>(parameterMap.size()); 
     for (Map.Entry<String, String[]> entry : parameterMap.entrySet()) { 
      if (entry.getValue().length > 0) { 
       result.put(entry.getKey(), entry.getValue()[0]); 
      } 
     } 
     return result; 
    } 
} 

benim @RequestParam parametre; Harita sınıf türü açıklamalı, eğer MultiValueMap olarak bu parametrenin içine tüm istek parametreleri koyar veya HashMap

Bağlantılı olduğu denetler