相同格式的多个提交按钮调用不同的Servlet

首先,下面是代码:

<form action="FirstServlet" method="Post">

Last Name: <input type="text" name="lastName" size="20">

<br><br>

<input type="submit" value="FirstServlet">

<input type="submit"value="SecondServlet">

</form>

我想了解如何在情况下发送信息的FirstServlet button被压到FirstServlet,并在情况下,SecondServlet

button被压到SecondServlet

我想以相同的形式进行操作,以便将相同的信息转换为两个servlet。(当然,在servlet中,我将相应地使用信息)

回答:

有几种方法可以实现此目的。

可能最简单的方法是使用JavaScript更改表单的操作。

<input type="submit" value="SecondServlet" onclick="form.action='SecondServlet';">

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


另一种方法是将第二个按钮设置为不同的形式,具体取决于具体的功能要求,这可能不是您所需要的,这在问题中根本不清楚。

<form action="FirstServlet" method="Post">

Last Name: <input type="text" name="lastName" size="20">

<br><br>

<input type="submit" value="FirstServlet">

</form>

<form action="SecondServlet" method="Post">

<input type="submit"value="SecondServlet">

</form>

请注意,表单在提交时只会发送完全相同的表单中包含的输入数据,而不会发送其他表单中的输入数据。


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

<form action="MainServlet" method="Post">

Last Name: <input type="text" name="lastName" size="20">

<br><br>

<input type="submit" name="action" value="FirstServlet">

<input type="submit" name="action" value="SecondServlet">

</form>

与以下 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 / maintenance友好。如果您需要以其他语言显示按钮或更改按钮值而又忘记考虑servlet代码怎么办?


稍作更改就是为按钮赋予其自己的固定且唯一的名称,以便可以检查按钮是否作为请求参数,而不是对i18n / maintenance敏感的值:

<form action="MainServlet" method="Post">

Last Name: <input type="text" name="lastName" size="20">

<br><br>

<input type="submit" name="first" value="FirstServlet">

<input type="submit" name="second" value="SecondServlet">

</form>

与以下 MainServlet

if (request.getParameter("first") != null) {

// Invoke FirstServlet's job here.

} else if (request.getParameter("second") != null) {

// Invoke SecondServlet's job here.

}


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

<h:form>

Last Name: <h:inputText value="#{bean.lastName}" size="20" />

<br/><br/>

<h:commandButton value="First" action="#{bean.first}" />

<h:commandButton value="Second" action="#{bean.Second}" />

</h:form>

仅使用以下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.

}

}

以上是 相同格式的多个提交按钮调用不同的Servlet 的全部内容, 来源链接: utcz.com/qa/407480.html

回到顶部