Istnieje kilka sposobów, aby to osiągnąć.
Prawdopodobnie najłatwiej byłoby użyć JavaScript, aby zmienić działanie formularza.
<input type="submit" value="SecondServlet" onclick="form.action='SecondServlet';">
Ale to oczywiście nie będzie działać, gdy Użytkownik końcowy ma JS niepełnosprawnych (mobilnych przeglądarek screenreaders, etc).
Innym sposobem jest umieszczenie drugiego przycisku w innej formie, która może lub nie może być to, czego potrzebujesz, w zależności od konkretnego obowiązku funkcjonalnej, która nie wynika z kwestii w ogóle.
<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>
Należy zauważyć, że forma będzie on złożyć tylko wysłać dane wejściowe znajdujące się w tej samej formie, a nie w innej formie.
Znowu innym sposobem jest po prostu utworzyć innego pojedynczego punktu wejścia aplet które przekazuje dalej na prawo serwletów (lub korzystnie, odpowiednie działania roboczych) w zależności od wciśnięty przycisk (co jest samo w sobie dostępny jako parametr żądanie przez jego name
):
<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>
z następujących w 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.
}
to nie jest tylko ver y i18n/przyjazne utrzymanie. Co zrobić, jeśli chcesz wyświetlać przyciski w innym języku lub zmieniać wartości przycisków, pamiętając o uwzględnieniu kodu serwletu?
Nieznaczna zmiana jest dać przyciski własną nazwę stałej i niepowtarzalną, tak, że jego obecność jako żądanie parametru mogą być sprawdzone, a nie jej wartości, które byłyby wrażliwe na i18n/konserwacji:
<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>
z następujących w MainServlet
if (request.getParameter("first") != null) {
// Invoke FirstServlet's job here.
} else if (request.getParameter("second") != null) {
// Invoke SecondServlet's job here.
}
ostatni sposób byłoby j Użyj struktury MVC, takiej jak JSF, aby móc bezpośrednio łączyć metody javabean z przyciskami, ale wymagałoby to drastycznych zmian w istniejącym kodzie.
<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>
tylko z następującym JavaBeans zamiast serwletu
@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.
}
}
Wow, bardzo wyczerpująca odpowiedź! –
+1 za odpowiedź poza zakresem :) – srk
@BalusC Czy możesz wyjaśnić, jak wywołać aplet, którego próbowałem, jak to 'RequestDispatcher rd = request.getRequestDispatcher ("/servletName "); \t \t rd.forward (żądanie, odpowiedź); '.Ale to nie działa – spt