2012-11-21 3 views
0

JSF 1.2와 Seam 프레임 워크를 사용하여 Java EE로 애플리케이션을 작성하고 있습니다. 나는이 같은 라디오 버튼에서 입력을 받아 형태가 있습니다라디오 버튼을 선택하지 않고 양식 제출을 수락

<h:selectOneRadio value="#{testAction.selectedOptionId}" 
       id="selectedQuestionOption" 
       layout="pageDirection"> 
    <s:selectItems var="selectedOption" value="#{currentQuestion.options}" 
        label="#{selectedOption.optionString}" 
        itemValue="#{selectedOption.optionId}"/> 
</h:selectOneRadio> 

<h:commandButton id="goToNextQuestion" value="Submit" 
       action="#{testAction.postAnswer}"/> 

나는 사람이 라디오 버튼을 선택하지 않고 양식을 제출하면 내가 그 결과를 받아 들일 것을 원하는, 그러나 그것은 작동하지 않습니다. 유효성 검사 단계에서 jsf는 제출을 거부하고 유효성 검사 오류를 발생시킵니다. 나는 불행히도 그것을 위해 맞춤법 검사기를 작성하려고했지만 나에게도 효과가 없었다.

의견이 있으십니까?

+0

유효성 검사 오류 란 무엇입니까? 여기에서 유효성 검사를 사용하고있는 것을 볼 수 없습니다. 스택 트레이스와'setSelectedOptionId()'메소드의 서명에서 관련 라인을 제공 할 수 있습니까? – prageeth

+0

jsf (다시 게시라고도 함)에 양식을 제출하면 바인딩 값, 유효성 검사와 같은 다양한 수명주기 이벤트가 통합됩니다. 이러한 단계 이벤트는 응용 프로그램 논리 코드가 상주하는 응용 프로그램 단계를 호출하기 전에 정상적인 흐름으로 실행됩니다. 것은 라디오입니다. 버튼 유효성 검사기는 라디오 버튼이 선택되지 않은 경우 값을 거부하고 양식으로 다시 리디렉션합니다. –

+0

설명 된 문제는''에'required = "true"'가 있지만 아무 것도없는 경우에만 발생합니다. 지금까지 코드는 괜찮아 보입니다. 그것은 나를 위해 잘 작동합니다. 문제는 다른 곳에서 발생합니다. SSCCE가 많은 도움이 될 것입니다. – BalusC

답변

0

이 경우에는 이상적인 해결책 인 사용자 정의 유효성 검사기를 작성하여이 문제에 대한 해결책을 찾지 못했습니다. 그러나이 상황을 극복하기위한 해결책을 찾았습니다. 나는이 같은 제출 버튼의 immediate = "true"을 설정하여 바인딩 값 및 검증 단계를 우회 할 수있다 :

<h:commandButton id="goToNextQuestion" value="Submit" immediate="true" 
      action="#{testAction.postAnswer}"/> 

를 서블릿이 응용 프로그램의 위상과 애플리케이션 로직을 호출로 이동합니다 직면 이후의 단계를 건너 뛰는 이렇게 같이 적용됩니다 게시 요청의 데이터가 빈에 바인딩되지 않는 처리 단계를 건너 뛰었습니다. 나는 (내 경우) 울부 짖는 소리처럼 그래서 그 콩을 사용하기 전에 당신은 RequestParameterMap에서 자신의 가치를 읽어야 다음

Map<String, String> paramMap = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap(); 

    for (String key : paramMap.keySet()) { 
     //log.info("Param: " + key + " Value: " + paramMap.get(key)); 
     if (key.contains("selectedQuestionOption")) { 
      //log.info("OptionParam: " + key + " Value: " + paramMap.get(key)); 
      selectedOptionId = Integer.parseInt(paramMap.get(key)); 
     } 
    } 

내 실제 비즈니스 로직을 적용했다.