2010-11-24 5 views
0

주요 업데이트 : 봄 때문에 onSubmit 호출이 발생하기 전에 유효성 검사기가 호출됩니다. 라디오 버튼을 선택하지 않으면 정상적으로 실행됩니다. 라디오 버튼을 선택하면 POST 데이터에 라디오 버튼에 대한 변수가 포함되어 NestedServletException이 발생합니다.JSP에서 라디오 버튼이 onSubmit을 더 이상 호출하지 않는 이유는 무엇입니까?

이 변수는 속성이나 클래스에 바인딩되지 않습니다. JSP 또는 코드 내에서 이러한 변수를 처리해야하는 "올바른"방법이 있습니까?


은 내가 JSP 페이지에 약간의 라디오 버튼을 추가 한 후 태그의 onsubmit 리스너가 더 이상 호출 봄에 매여 JSP 페이지를 가지고있다. 라디오 버튼이 없으면 맨 페이지 버전이 이렇게 보입니다.

<form:form> 
    <fieldset> 
     <input type="submit" value="Submit"/> 
    </fieldset> 
</form:form> 

예상대로 작동합니다. 제출 단추를 누르면 디버거가 onSubmit에 대한 중단 점에 도달합니다. 그런 다음 아래에서 볼 수있는 라디오 버튼에 대해 다음 코드를 추가합니다. 이제

<form:form> 
    <fieldset> 
     <input type="submit" value="Submit"/> 
    </fieldset> 

    <fieldset class="contentHalfFieldset"><legend>NID</legend> 
     <input type="radio" name="someName" value="value1" /> 
     <input type="radio" name="someName" value="value2" /> 
     <input type="radio" name="someName" value="value3" /> 
    </fieldset> 
</form:form> 

, 내가 어떤 라디오 버튼을 선택하지 않는 경우, 버튼은 여전히 ​​태그의 onsubmit 방법에 중단 점에 도달하기 위해 제출 이벤트를 발생 제출합니다. 의도 한대로 작동합니다. 그러나 라디오 버튼 중 하나를 선택하고 제출 버튼을 누르면 페이지가 새로 고침됩니다.

왜 그럴까요? 입력 버튼이 제출 처리를 방해하는 원인은 무엇입니까?

------- 생성 된 HTML은 -------

<form id="cmd" method="post" action="/page/pageAction.html?param=k" onsubmit="disableSubmit(this);"> 
    <fieldset class="contentHalfFieldset"><legend>NID</legend> 
     <label class="labelClass">First radio button:</label> 
     <input type="radio" name="nidStatus" value="first" /><br style="clear: both"/> 
     <label class="labelClass">Second radion button:</label> 
     <input type="radio" name="nidStatus" value="second" /><br style="clear: both"/> 
     <label class="labelClass">Third radio button</label> 
     <input type="radio" name="nidStatus" value="third" /><br style="clear: both"/> 
    </fieldset> 

</form> 

는 ------- 더 요청 코드이

입니다 ------- disableSubmit (..) 메소드.

function disableSubmit(parentElement) { 
    elements = parentElement.elements; 

    for(var i = 0; i < elements.length; i++) { 
     var element = elements[i]; 

     if(element.type == "submit") { 
      element.disabled=true; 
      element.value="Please Wait..."; 
     } 
    } 
}; 
+0

은 아마도 "onSubmit()"메소드일까요? 아마도 Spring-MVC 컨트롤러일까요? 그렇다면 특정 requestMethod (아마도 get)을 onSubmit() 메쏘 드로 매핑하고 있습니까? – DwB

+0

나는이 프로젝트가 이미 구축 되었기 때문에 실제로 배웠고 적응했다. 그래서 나의 용어를 변명해라. 그것을 배우고 그것에 프로젝트를 구축하는 것과 같지 않습니다. 나는 Spring MVC를 기술로 사용하고 있을지 모른다. 나는 확실히 Spring을 사용하고 있으며, 과거에는

형식으로 변수를 바인딩 할 수있었습니다. 그게 Spring MVC라면, 나는 그것을 사용하고있다. 위에 제공된 내용으로 인해 태그는 이와 같이 영향을 미치지 않을 것이라고 생각합니다.그것은 onSubmit 호출을 깨는 어떤 방법으로 값을 패키지화하려고합니까? – Danny

+0

생성 된 HTML도 공유하십시오. –

답변

0

스프링은 귀하의 컨트롤 (내 경우에는 라디오 버튼)과 동일한 이름으로 지정되면 변수를 바인딩하려고 시도합니다. 변수를 처리 할 코드에 따라 다릅니다.을 Y 인드하려는 것이 아닌 의 경우 onSubmit 메소드에 도달하기 전에 예외가 발생할 수 있습니다.

내 경우에는 열거 형의 "nidStatus"변수를 가진 클래스가 있습니다. 변수 "US & nidStatus"(Michael Kopinsky에 대한 응답의 주석 참조)가 POST 작업에서 전송되면 자동 바인딩 시도가있었습니다. 흥미롭게도이 던져지기 전에 유효성 검사가 정상적으로 처리되었으므로 다른 사람이 받아 들일 수 없지만이 질문을 발견 한 경우 validate() 메서드에서 오류 변수를 확인하십시오. 처리기가 계속 넘어서 계속됩니다. 그 점이 사물이 괜찮은 것처럼 가리 킵니다.

관련 문제