2012-08-06 2 views
25

먼저 호출에 버튼을 제출, 여기에 코드입니다 :복수가 같은 형태가 다른 서블릿

<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 buttonSecondServlet button 경우 FirstServlet과에 누를 경우 정보를 전송하는 방법을 이해하고 싶습니다 SecondServlet에 눌려졌다. 중요한

는 :
나는 동일한 정보가 모두 서블릿에 transered 될 수 있도록 같은 형태를하고 싶어. (물론, 서블릿에서 그에 맞는 정보를 사용할 것입니다.)

답변

79

이것을 달성하는 데는 여러 가지 방법이 있습니다.

아마도 가장 쉬운 방법은 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> 

참고.


는 또 다른 방법은 적절한 서블릿하는 위임 또 다른 하나의 엔트리 포인트 서블릿을 생성하는 것이다 (바람직하게 오른쪽 비즈니스 동작) 버튼에 따라 자체적으로 요구 파라미터로서 사용할 수있는 (가압 그는 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. 
} 

에 다음과

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

이 버전뿐만 아니라입니다 i18n/유지 보수가 용이합니다. 서블릿 코드를 고려하지 않은 채 다른 언어로 버튼을 표시하거나 단추 값을 변경해야하는 경우에는 어떻게해야합니까?

<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> 
: 요청 매개 변수로 그 존재 대신 국제화/유지 보수에 민감 할 것이다 가치의 확인 수 있도록


약간의 변화는 버튼을 자신의 고정 고유 한 이름을 지정하는 것입니다 와

제 j하는 것 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 메서드를 버튼에 직접 바인딩 할 수 있지만 기존 코드를 크게 변경해야합니다. 이전 응답뿐만 아니라, 최선의 선택은 언어 문제없이 다른 버튼과 양식을 제출

@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. 
    } 

} 
+4

와우, 매우 포괄적 인 답변! –

+0

+1의 답을 얻으려면 +1 : – srk

+0

@BalusC 서블릿을 호출하는 방법을 설명해 주시겠습니까?이 RequestDispatcher rd = request.getRequestDispatcher ("/ servletName"); \t \t \t rd.forward (request, response);하지만 작동하지 않습니다. – spt

0

각 버튼 제출에 대한 자바 스크립트를 작성해야 할 수도 있습니다. 양식 정의에서 동작을 정의하는 대신 자바 스크립트에서 해당 값을 설정하십시오. 아래처럼.

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

대신 서블릿의 바로 다음 자바 빈즈와

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

실제로 버튼을 사용하고 있습니다 꼬리표.

<form> 
    ... 
    <button type="submit" name="submit" value="servlet1">Go to 1st Servlet</button> 
    <button type="submit" name="submit" value="servlet2">Go to 2nd Servlet</button> 
</form> 
2

당신이 jQuery를 사용하는 경우, u는 이런 식으로 작업을 수행 할 수 있습니다

<form action="example" method="post" id="loginform"> 
    ... 
    <input id="btnin" type="button" value="login"/> 
    <input id="btnreg" type="button" value="regist"/> 
</form> 

그리고 JS는 다음과 같습니다 당신이 봄이 더 좋은 방법을 사용

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