2013-07-31 19 views
34

Yay mvc kullanıyorum. Ve method = post olduğunda url'den param olamaz. Ama yöntemi GET olarak değiştirdiğimde, tüm paramları alabilirim.bahar sonrası mvc sonrası param nasıl?

Bu benim biçimidir:

<form method="POST" action="http://localhost:8080/cms/customer/create_customer" id="frmRegister" name ="frmRegister" enctype="multipart/form-data"> 
    <input class ="iptRegister" type="text" id="txtEmail" name="txtEmail" value="" /> 
    <input class ="iptRegister" type="password" id="txtPassword" name="txtPassword" value="" /> 
    <input class ="iptRegister" type="text" id="txtPhone" name="txtPhone" value="" /> 

    <input type="button" id="btnRegister" name="btnRegister" value="Register" onclick="" style="cursor:pointer"/> 
</form> 

Bu benim denetleyicisi geçerli:

@RequestMapping(value= "/create_customer", method = RequestMethod.POST) 
@ResponseBody 
public String createCustomer(HttpServletRequest request, 
     @RequestParam(value="txtEmail", required=false) String email, 
     @RequestParam(value="txtPassword", required=false) String password, 
     @RequestParam(value="txtPhone", required=false) String phone){ 

    ResultDTO<String> rs = new ResultDTO<String>(); 
    rs.setStatus(IConfig.SHOW_RESULT_SUCCESS_ON_MAIN_SCREEN); 
    try{ 
     Customer c = new Customer(); 
     c.setEmail(email); 
     c.setPassword(password); 
     c.setPhone(phone); 
     customerService.insert(c); 
     rs.setData("Insert success"); 
    }catch(Exception ex){ 
     log.error(ex); 
     rs.setStatus(IConfig.SHOW_RESULT_ERROR_ON_MAIN_SCREEN); 
     rs.setData("Insert failure"); 
    } 
    return rs.toString(); 
} 

Nasıl bu çözülebileceğini?

+2

Bu parametreleri JSP'nizdeki formda nasıl ayarlıyorsunuz? Bu kodun biraz daha fazlasını gösterebilir misin? – adarshr

cevap

46
  1. enctype="multipart/form-data" ürününü kaldırırsanız, yaylı notlar düzgün çalışır.

    @RequestParam(value="txtEmail", required=false) 
    
  2. Hatta request nesneden parametrelerini elde edebilirsiniz.

    request.getParameter(paramName); 
    
  3. niteliklerin sayısı büyüktür durumda bir form kullanın. Uygun olacak. Başlamak için Tutorial.

  4. Yapılandırma Çok parçalı çözümleyici sen enctype="multipart/form-data" almak istiyorsanız.

    <bean id="multipartResolver" 
        class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> 
        <property name="maxUploadSize" value="250000"/> 
    </bean> 
    

Spring documentation bakın. aşağıdaki gibi de başlık değer katmak denetleyicisi olarak içerik türünü

<form method="POST" 
    action="http://localhost:8080/cms/customer/create_customer" 
    id="frmRegister" name="frmRegister" 
    enctype="application/x-www-form-urlencoded"> 

değiştirirseniz

+0

Birkaç taneden daha fazlası varsa, parametreleri bağlamak için bir form kullanmanızı öneririm. Spring'in 'RequestParam' ek açıklaması, kod boyunca' request.getParameter' yerine kesinlikle daha iyi okunan bir kolaylık mekanizmasıdır. Ama MultipartResolver bit için +1. – adarshr

+0

Form etiketi kullanıldığında, fasulye alan adlarının html koduna sahip olması önemli değil mi? – gab06

8

Ayrıca çalışır:

@RequestMapping(value = "/create_customer", method = RequestMethod.POST, headers = "Content-Type=application/x-www-form-urlencoded") 
7

Bütün POST params almak istiyorum zaman aşağıdaki kodu kullanıyorum,

@RequestMapping(value = "/", method = RequestMethod.POST) 
public ViewForResponseClass update(@RequestBody AClass anObject) { 
    // Source.. 
} 

kullanıyorum posta/koymak için @RequestBody açıklama/yerine GET parametrelerini okur @RequestParam http isteklerini silin.

+0

Teşekkürler, istediğim bu ... !! –

4

Sen istek organı olarak göndermek zorundadır, parametreleri göndermek için yöntemin = RequestMethod.GET

olanlarda kaynaklar üzerinde @RequestParam kullanmalıdır. JSON gibi bir beden veya başka bir veri temsili uygulamanıza bağlı olacaktır (MediaType tüketmek ve üretmek demek).

Tipik olarak çok parçalı/form- dosya yüklemek için kullanılır.

İlgili konular