Spring将表单的操作映射到控制器

时间:2012-09-14 05:04:35

标签: spring

我是Spring Framework的新手,我用方法

创建了一个控制器
@RequestMapping("/fetch/{contactId}")
public String getContact(@PathVariable("contactId") Long contactId,
        Map<String, Object> map, HttpServletRequest request,
        HttpServletResponse response) {

    Contact contact = contactService.get(contactId);
    map.put("contact", contact);
    return "contact";
}

当用户点击jsp

上的链接时,将调用此fetch方法来检索联系人详细信息
<td><a href="fetch/${contact.id}" class="edit">Edit</a></td>

然后成功返回联系对象并显示在屏幕上供用户更改和保存。我的jsp的表单标签就像这样

<form:form method="post" action="add.html" commandName="contact"
        id="contact" onsubmit="return validateContact(this)">

现在问题是,当我尝试将页面提交到同一控制器中的另一个方法时,URL更改为

/myapp/app/contacts/fetch/add.html

然而它应该是

/myapp/app/contacts/add.html

我知道有些事我说得不对,但到底是什么我无法弄明白。感谢您是否有人能帮我解决问题

由于 AA

3 个答案:

答案 0 :(得分:7)

使用

<c:url var="addUrl" value="/contacts/add.html"/>
<form:form method="post" action="${addUrl}" commandName="contact"
      id="contact" onsubmit="return validateContact(this)">

一般情况下,建议在每个应用程序内部使用c:url,而不是直接使用<a>标记中的网址。

答案 1 :(得分:0)

/contacts/add.html属性中使用action 改变

<form:form method="post" action="add.html" commandName="contact"
        id="contact" onsubmit="return validateContact(this)">

<form:form method="post" action="/contacts/add.html" commandName="contact"
        id="contact" onsubmit="return validateContact(this)">

答案 2 :(得分:0)

<form:form method="post" servletRelativeAction="/contacts/add" commandName="contact"
        id="contact" onsubmit="return validateContact(this)">

使用属性servletRelativeAction映射到所需的控制器操作。我假设您所需的控制器被映射为&#39; / contacts / add&#39;不是&#39; add.html&#39;。你想要控制器而不是视图。