2010-01-08 2 views
4

Spring 애플리케이션에서 동일한 컨트롤러로 이동하는 여러 제출 버튼이있는 양식이있는 JSP가 있습니다. 컨트롤러에서 어떤 버튼을 눌렀는지 확인할 수 있어야합니다. 이 양식에는 사용자에게 여러 항목이 표시되며 선택한 항목의 ID 만 다를뿐 항목 중 하나를 선택할 수 있습니다. 는 JSP에서 폼에 여러 제출 버튼이 있고 컨트롤러에서 눌려진 버튼을 확인하십시오.

, 나는 다음과 같은 형태를 만드는거야 : 로그의 메시지와 형성에 제출되지 않은 : 그러나
<form:form method="post" commandName="myCommand"> 

    <c:forEach items="${model.availableitems}" var="item"> 
     <span class="item">${item.description}</span> 
     <input type="hidden" name="id" value="${item.ID}"/> 
     <input type="submit" name="SelectButton" value="Select" /> 
    </c:forEach> 

    </div> 
</form:form> 

, 이것은 나에게 "한 데이터 바인딩 오류를"제공 제어 장치.

int에서 String으로 myCommand.id를 변경하려고 시도했지만 제출할 때 값은 id1, id2, id3 ... (쉼표로 구분 된 모든 ID)이며 결정할 방법이 없습니다. 어느 버튼을 눌렀는지. 항목 수가 늘어날수록 각 버튼마다 다른 액션을 지정하지 않아도되며, 액션은 모두 동일하고 ID가 다를뿐입니다.

이 양식에 여러 개의 단추가있을 수 있으며 컨트롤러에서 값을 가져올 수 있습니까?

답변

7

왜 각 항목마다 별도의 양식을 사용하지 않는 것이 좋을까요?
1 -

<c:forEach items="${model.availableitems}" var="item"> 
    <form:form method="post" commandName="myCommand"> 
    <span class="item">${item.description}</span> 
    <input type="hidden" name="id" value="${item.ID}"/> 
    <input type="submit" name="SelectButton" value="Select" /> 
    </form:form>   
</c:forEach> 
0

대신 버튼이 숨겨진 필드의 값을 설정하고 form.submit()

당신이 루프

+2

제발 자바 해킹을 사용하지 마세요. 그건 전혀 의미가 없습니다. – BalusC

0

를 사용하여 버튼을 생성 할 수 있습니다 호출 함수를 호출하는 버튼을 사용하여 제출 사용하는 당신은 3 가지 옵션이 있습니다 여러 양식을 사용하고 위에 제안 된대로 각 양식에 제출 단추가 있어야합니다. 생성 된 코드는보기에별로 좋지 않을 것이고 일반적으로 페이지에 여러 폼을 갖는 것은 나쁜 습관으로 간주됩니다.
2. 자바 스크립트 해킹을 사용하여 제출 버튼을 눌렀을 때 숨겨진 변수를 설정하십시오.
3. fallback (JavaScript 제외)을 처리해야하는 경우 클릭 한 버튼을 찾는 원형 교차로가 있습니다. 다음은 예입니다. -

<form:form method="post" commandName="myCommand">    
    <c:forEach items="${model.availableitems}" var="item">    
     <span class="item">${item.description}</span>    
     <input type="submit" name="${item.ID}" value="Select" />    
    </c:forEach> 
</form:form>      

각 버튼마다 고유 한 ID를 설정합니다. 요청 매개 변수는 키 값 쌍으로 사용되므로이 경우 키 위치에 값이 있으므로 역방향 조회를 수행해야합니다. 여기에 그것의 자바 쪽이 있습니다 .. 이것이 가장 효율적인 방법이지만 그것을 작동하는지 확실하지 않습니다.

String searchButtonName(final HttpRequest request) { 
    String buttonName = ""; 
    Map<String, String[]> paramMap = request.getParameterMap(); 
    if (MapUtils.isNotEmpty(paramMap)) { 
      for (Map.Entry<String, String[]> entry : paramMap.entrySet()) { 
        /* Search for the button name as given in 
         the 'value' attribute for the input tag */ 
        if ("Select".equals(entry.getValue()[0])) { 
          buttonName = entry.getKey(); 
          break; 
        } 
      } 
    } 
    return buttonName; 
} 
0

컨트롤러의 인수 목록에 주석 매개 변수 @RequestParam("SelectButton") String submit을 사용할 수 있습니다.

+1

이것은 입력 요소의'value'를 제공하지 않습니다. 각 요소에 대해 "Select"가 될 것입니까? – RustyTheBoyRobot

관련 문제