我正在尝试在Freemarker模板中使用按钮调用删除方法。 我认为这就像在我的资源类中为该方法定义路径一样简单,然后将表单的操作指向该路径;但是,当我按下按钮时没有任何反应。
下面是按钮的代码:
<form action="http://localhost:8080/person/delete/${person.id}">
<input type="button" value="Delete"></form>
从理论上讲,这应该激活向SQL服务器发送删除请求的方法。 我用于此的原始方法是:
@DELETE
@Path("/delete/{id}")
public void deletePerson(@PathParam("id") int id) {
manager.deletePerson(id);
}
这使用 DAO 发送请求。 我在邮递员中对此进行了测试,它有效。 我以为我可以将按钮指向相同的路径来使用它,但这不起作用。 因此,我尝试修改构造函数用于 ftl 模板的方法:
@DELETE
@Path("/delete/{id}")
public PersonView deletePerson(@PathParam("id") int id) {
return new PersonView(manager.deletePerson(id));
}
但这遇到了一个问题,即我无法将返回人员列表的 PersonView 应用于删除 Person,这是一种无效方法。 有人对我如何做到这一点有任何见解吗?看起来应该很简单,但我想不通。
编辑:
除了 user7294900 关于提交按钮的答案外,我还需要对删除方法进行更改。 在研究这个问题时,我还发现 html 表单不能使用 DELETE 或 PUT 方法;只有发布和获取。 考虑到这一点,我将资源方法更改为使用@POST注释:
@POST
@Path("/delete/{id}")
public void deletePerson(@PathParam("id") int id) {
manager.deletePerson(id);
}
我还对表单按钮进行了必要的提交更改:
<form method="post" action="http://localhost:8080/person/delete/${profile.id}">
<input type="submit" value="Delete"></form>
似乎您的问题是 HTML 输入类型,应该submit
输入类型才能提交表单
类型为"提交"的元素呈现为按钮。当单击事件发生时(通常是因为用户单击了按钮),用户代理尝试将表单提交到服务器
因此,请将按钮更改为:
<input type="submit" value="Delete"></form></td>