2012-10-11 2 views
0

안녕하세요. 다음 코드 스 니펫을 가지고 있습니다.JSF 1.2 : a4j : selectOneRadio가 예상대로 작동하지 않습니다.

그 뒤에있는 생각은 제가 선택을하고 싶다는 것이며 그 선택에 따라 양식에 몇 가지 추가 필드를 렌더링하고 싶습니다.

사용자가 "예"라고 대답하면 추가 필드를 채워야합니다. 다른 필드 (ajaxSingle = "false")에 사용자 입력을 유지하고 사용자가 전체 양식을 채울 때까지 모델을 업데이트하고 유효성 검사기를 실행하지 않으려 고하기 때문에이 a4j : 지원 부분이 있습니다 (즉 치 = "true"). . 표시되는 양식 구성 요소를 제어하기 때문에 하나의 속성 "bean.answer"(a4j : actionparam) 만 업데이트하려고합니다.

<h:form id="form"> 
    ... 

    <h:selectOneMenu id="question" 
        value="#{bean.answer}" 
        required="true"> 
     <f:selectItem itemLabel="No" itemValue="false" /> 
     <f:selectItem itemLabel="Yes" itemValue="true" /> 
     <a4j:support event="onchange" 
        ajaxSingle="false" 
        immediate="true" 
        reRender="form"> 
      <a4j:actionparam name="question" 
          value="$('form:question').value" 
          assignTo="#{bean.answer}" 
          noEscape="true"/> 
      </a4j:support> 
    </h:selectOneMenu> 

... 

    <h:outputText value="Additional field" 
        styleClass="boldedFont" 
        rendered="#{bean.answer}"/> 
    <h:inputText id="fieldId" 
        value="#{bean.additionalFieldValue}" 
        required="true" 
        rendered="#{bean.answer}"/> 
... 

</h:form> 

위의 코드는 내가 원하는대로 작동합니다. 내 대답을 변경할 때마다 bean 값 # {bean.answer}이 업데이트되고 양식이 다시 표시되며 추가 필드가 표시되거나 사라집니다.

문제 :

내가 라디오 butons에 poplist (selectOneMenu를) 변경 (selectOneRadio)합니다. 시간에 selectOneMenu : 그래서 나의 새로운 코드에서 단순히 시간을 변경 selectOneRadio :

<h:form id="form"> 
    ... 

    <h:selectOneRadio id="question" 
        value="#{bean.answer}" 
        required="true"> 
     <f:selectItem itemLabel="No" itemValue="false" /> 
     <f:selectItem itemLabel="Yes" itemValue="true" /> 
     <a4j:support event="onchange" 
        ajaxSingle="false" 
        immediate="true" 
        reRender="form"> 
      <a4j:actionparam name="question" 
          value="$('form:question').value" 
          assignTo="#{bean.answer}" 
          noEscape="true"/> 
      </a4j:support> 
    </h:selectOneRadio> 

... 

    <h:outputText value="Additional field" 
        styleClass="boldedFont" 
        rendered="#{bean.answer}"/> 
    <h:inputText id="fieldId" 
        value="#{bean.additionalFieldValue}" 
        required="true" 
        rendered="#{bean.answer}"/> 
... 

</h:form> 

그러나이 코드 어쩌려 구`t 작동합니다. 내 대답을 바꿀 때마다 bean 값 # {bean.answer}는 같은 "false"값으로 업데이트되고 추가 필드는 나타나지 않습니다.

시간과 같은 행동을 달성 할 수있는 간단한 방법이 있나요 : selectOneMenu : 시간과 같은 selectOneRadio은?

감사

답변

3

onchange 이벤트는 라디오 버튼 그룹 내에서 변화를 듣거나 상자를 확인하는 잘못된 이벤트입니다. 기본적으로 하나가 아닌 여러 입력 요소로 존재합니다. 대신 onclick이 필요합니다.

+0

감사합니다. onchange 이벤트를 onclick으로 변경하면이 코드에 대한 수정이 한 번 더 필요합니다. 'value = "$ ('form : question '). value"'->'value = "this.value" 'form : question : 0','form : question : 1'과 같은 다른 ID를 가진 여러 입력으로 인해 – bary

+0

여러분을 환영합니다. 미안, 나는 그 부분에 관심을 기울이지 않았다. – BalusC

관련 문제