如何在 Freemarker DropWizard 中使用按钮调用方法

How to call a method with a button in Freemarker DropWizard

我正在尝试使用 Freemarker 模板中的按钮调用删除方法。我认为这就像在我的资源 class 中定义该方法的路径一样简单,然后将表单的操作指向该路径;但是,当我按下按钮时没有任何反应。

这是按钮的代码:

<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));
}

但这遇到了一个问题,我无法将 returns 人员列表的 PersonView 应用于 deletePerson,这是一个无效的方法。有谁知道我该怎么做?看起来应该很简单,就是想不通

编辑:

除了 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>

您的问题似乎是 HTML input 类型,应该是 submit 类型才能提交您的表单

elements of type "submit" are rendered as buttons. When the click event occurs (typically because the user clicked the button), the user agent attempts to submit the form to the server

所以将您的按钮更改为:

 <input type="submit" value="Delete"></form></td>