1

我正在尝试使用 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>
4

1 回答 1

1

您的问题似乎是 HTML输入类型,应该是submit类型以便提交您的表单

“提交”类型的元素呈现为按钮。当点击事件发生时(通常是因为用户点击了按钮),用户代理尝试将表单提交给服务器

因此,将您的按钮更改为:

 <input type="submit" value="Delete"></form></td>
于 2018-03-07T15:33:12.287 回答