我正在尝试使用 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 发送请求。我在 Postman 中对此进行了测试,并且可以正常工作。我以为我可以将按钮指向相同的路径来使用它,但这不起作用。因此,我尝试修改构造函数用于 ftl 模板的方法:
@DELETE
@Path("/delete/{id}")
public PersonView deletePerson(@PathParam("id") int id) {
return new PersonView(manager.deletePerson(id));
}
但这遇到了一个问题,即我无法将返回人员列表的 PersonView 应用于 deletePerson,这是一个 void 方法。有人对我如何做到这一点有任何见解吗?看起来应该很简单,但我无法弄清楚。
编辑:
除了关于提交按钮的 user7294900 答案之外,我还需要对删除方法进行更改。在研究这个问题时,我还发现 html 表单不能与 DELETE 或 PUT 方法一起使用;只有 POST 和 GET。考虑到这一点,我将资源方法更改为使用 @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>