在我的Spring应用程序中,我这样做..
我的Jsp表单点击超链接表单将被发送..
<form:form action="user" modelAttribute="NAME">
<a href="href_form1" onclick="onClick_Save()" class="save">Save</a>
</fomr:form>
<script>
function onClick_Save() {
$("#NAME").attr("action", $('.save').attr("href"));
$("#NAME").submit();
});
</script>
在我的Controller类中,我编写了方法。
@RequestMapping(value = "href_form1", method = RequestMethod.POST)
public @ResponseBody String href_form1(UserForm userForm,Model model)throws Exception {
//Database code here.
model.addAttribute("NAME", userForm);
return "User Updated";
}
EDIT1:
WARNING: Request method 'GET' not supported
我正在收到错误页面。
HTTP Status 405 - Request method 'GET' not supported
修改下面的代码后编辑
<script>
$(function() {
$('.save').on("click",function(e) {
e.preventDefault();
$("#NAME").attr("action", $(this).attr("href")).attr("method","POST");
$("#NAME").submit();
});
});
</script>
但我的表单无法达到我的控制器方法。
我的代码有什么问题吗?我还在表单标记中尝试了method="POST"
。
答案 0 :(得分:1)
以下是您收到错误的原因
链接的href在单击时调用控制器,因为您没有取消链接的默认操作
所以代码执行以下操作
在我看来,你有以下几种可能性 - 其中一些被认为比其他人更好。
非javascript
method = { RequestMethod.GET, RequestMethod.POST}
或method = RequestMethod.GET
- GET将允许您删除表单并且只有以下链接(当然更新弹簧代码后) <a href="href_link?user=user1">Save User1</a>
如果您愿意
JavaScript辅助
在表单中包含一个参数,其中包含您要保存的内容的标识,通过JavaScript设置THAT并执行 MANDATORY return false
或preventDefault
取消链接:
<!-- this is an example of the rendered form -->
<form action="href_form1" id="NAME" method="POST">
<input type="hidden" name="saveItem" id="saveItem" value="" />
</form>
<a href="#" class="saveLink" data-save="save item 1">Save item 1</a>
<a href="#" class="saveLink" data-save="save item 2">Save item 2</a>
<a href="#" class="saveLink" data-save="save item 3">Save item 3</a>
请注意我在href中没有链接以避免请求某些内容
使用此过程的jQuery:
$(function() {
// assuming form ID="NAME"
$(".saveLink").on("click",function(e) {
e.preventDefault(); // do not follow link
$("#saveItem").val($(this).data("save")); // set the hidden field
$("#NAME").submit();
});
});
这可能是一种更有趣的方式,假设您的弹簧控制器已经连接起来处理您的请求:
$(function() {
$('.save').on("click",function(e) { // passing event
e.preventDefault(); // jQuery will normalise it for all modern browsers
// post the href of the link to the server and return the result in a
// container with ID result
$.post($(this).attr("href"), function(data) { // or $.get if you want
$('#result').html(data);
});
});
答案 1 :(得分:1)
您需要在method
标记中指定form
。是的,您的超链接忽略了表单。因此,将表单上的action
属性设置为href_form1
并将您的超链接更改为提交输入或(我不建议这样做)更改您的超链接以进行JavaScript提交。目前,您已在链接中设置了onclick
和 href
。以下是最佳做法。
<form:form action="href_form1" modelAttribute="NAME" method="POST">
<input type="submit" value="Save" />
此外,您的jQuery选择器$("#NAME")
找不到任何内容,因为您尚未在要获取的表单上设置id
属性。
答案 2 :(得分:1)
请尝试这样的事情
<form:form action="href_form1" modelAttribute="NAME" method="POST">
<input type="submit"/>
</form:form>
@RequestMapping(value = "href_form1", method = RequestMethod.POST)
public @ResponseBody String href_form1(UserForm userForm,Model model)throws Exception {
//Database code here.
model.addAttribute("NAME", userForm);
return "User Updated";
}
基本上是一个非常简单的表单提交。一旦你完成这项工作,你知道你的表单和控制器已正确设置。在此之后,如果您想使用锚标记提交表单,请返回之前的建议preventDefault
,然后表单提交。
希望这有帮助。
答案 3 :(得分:0)
表单提交的默认http方法是GET。由于你想要POST,请指明它,它将起作用lie method="POST"
此外,我在代码中没有看到正确的url映射。你能否确认一下是否正确。