调用不同Servlet的同一表单中的多个提交按钮

首先,这是代码:

Last Name:

我想了解如何在FirstServlet button被按下FirstServlet情况下发送信息,以及如果将SecondServlet button按下到SecondServlet

重要:
我想以相同的forms执行此操作,因此相同的信息将被转换为两个servlet。 (当然,在servlet中我将相应地使用信息)

有几种方法可以实现这一目标。

可能最简单的方法是使用JavaScript来改变表单的动作。

  

但是当最终用户禁用JS(移动浏览器,屏幕阅读器等)时,这当然不起作用。


另一种方法是将第二个按钮放在不同的forms,根据具体的function要求,这可能是你需要的,也可能不是你需要的,这根本不是问题所在。

 
Last Name:

请注意,表单将在提交时仅发送包含在同一表单中的输入数据,而不是以其他forms发送。


另一种方法是创建另一个单一入口点servlet,它根据按下的按钮进一步委托给正确的servlet(或者最好是正确的业务操作)(它本身可以通过其name作为请求参数):

 
Last Name:

MainServlet具有以下内容

 String action = request.getParameter("action"); if ("FirstServlet".equals(action)) { // Invoke FirstServlet's job here. } else if ("SecondServlet".equals(action)) { // Invoke SecondServlet's job here. } 

这只是i18n /维护友好。 如果您需要在忘记考虑servlet代码的同时显示不同语言的按钮或更改按钮值,该怎么办?


稍微改变是为按钮提供固定且唯一的名称,以便可以检查其作为请求参数的存在而不是其对i18n / maintenance敏感的值:

 
Last Name:

MainServlet具有以下内容

 if (request.getParameter("first") != null) { // Invoke FirstServlet's job here. } else if (request.getParameter("second") != null) { // Invoke SecondServlet's job here. } 

最后一种方法是使用像JSF这样的MVC框架,以便您可以直接将javabean方法绑定到按钮,但这需要对现有代码进行大幅更改。

  Last Name:  

只使用以下javabean而不是servlet

 @ManagedBean @RequestScoped public class Bean { private String lastName; // +getter+setter public void first() { // Invoke original FirstServlet's job here. } public void second() { // Invoke original SecondServlet's job here. } } 

除了之前的响应之外,提交具有不同语言问题的不同按钮的表单的最佳选择实际上是使用按钮标记。

 
...

如果你使用jQuery,你可以这样做:

 
...

并且js将是:

 $("#btnin").click(function(){ $("#loginform").attr("action", "user_login"); $("#loginform").submit(); } $("#btnreg").click(function(){ $("#loginform").attr("action", "user_regist"); $("#loginform").submit(); } 

您可能需要为每个按钮提交编写一个javascript。 不是在表单定义中定义操作,而是在javascript中设置这些值。 像下面的东西。

 function callButton1(form, yourServ) { form.action = yourServ; form.submit(); }); 

如果你使用弹簧这是一个更好的方法

有没有办法使用注释在Spring MVC上创建具有多个提交按钮的表单?