2012-07-23 37 views
3

我可以将Spring表单标记库与Ajax结合使用吗? 我无法检索控制器内的表单输入参数。他们总是nullSpring和Ajax

实际上有一种逻辑,表单永远不会被提交。但是,我只能将字符串发送到我的控制器,而不是像表单提交那样将对象映射到弹簧commandBean

表单接受commandBean

<form:form method="POST" commandName="clinicBean"> 
    Clinic Name: <form:input path="name" type="text" /><br/> 
    Clinic Address: <form:input path="address" type="text"/><br/> 
    <input type="button" value="Create Clinic" onclick="clinicAjax()"/> 
</form:form> 

Ajax的函数调用弹簧控制器

function clinicAjax(){ 
    alert('Inside Clinic Ajax Method'); 
    $.ajax({ 
     url: 'clinicAjax', 
     type: 'POST', 
     success: alert('Ajax Successful') 
    }); 
} 

弹簧控制器方法:

@RequestMapping(value="clinicAjax",method=RequestMethod.POST) 


public @ResponseBody String createClinic(@ModelAttribute("clinicBean") Clinic clinic){ 
     System.out.println("Ajax call successful"); 
     System.out.println(clinic); 
     System.out.println(clinic.getName()); 
     System.out.println(clinic.getAddress()); 
     return "SUCCESS"; 
    } 

它始终在System.out.println()语句中得到null

+0

添加一些相关代码将有很大帮助。 – xyz 2012-07-23 11:49:03

+0

是否可以在不刷新页面的情况下使用此配置? – zygimantus 2016-12-05 19:51:41

回答

5

问题是,你不在任何地方序列化你的表单,所以它没有被发送到服务器。

更改您的JavaScript代码:

function clinicAjax(){ 
    alert('Inside Clinic Ajax Method'); 
    $.ajax({ 
     url: 'clinicAjax', 
     data: yourFormElement.serialize(); /* i.e. $('#formId').serialize(); */ 
     type: 'POST', 
     success: alert('Ajax Successful') 
    }); 
} 

替代yourFormElement使用jQuery对象,表示您的形式,它应该工作。