2015-01-20 6 views
2

데이터베이스의 질문 목록을 표시하고 있으며 각 질문에 대해 옵션 목록 (이 경우 라디오 버튼)을 표시해야합니다.내부 입력 구성 요소 ui : repeat, 제출 된 값을 저장하는 방법

<ui:repeat value="#{formData.questions}" var="question"> 
    <div> 
     <p:outputLabel value="#{question.name}" /> 
     <p:selectOneRadio value="#{formData.selectedOption}"> 
      <f:selectItems value="#{formData.options}" /> 
     </p:selectOneRadio> 
    </div> 
</ui:repeat> 

각 질문에 대해 선택한 옵션을 저장해야합니다.

어떻게하면됩니까?

+0

무엇이 작동하지 않습니까? 필요에 따라 선택적으로이 경우 특히 [ ''] (http://www.primefaces.org/showcase/ui/data/dataList.xhtml)과 같은 다른 반복 구성 요소를 사용할 수 있습니다. 보너스로 목록에 관한 질문이 너무 길면 상자 밖에서 페이지 매김 기능을 받게됩니다). – Tiny

답변

5

어떤 식 으로든 입력 값을 반복 변수 var에 연결해야합니다. 지금 당장 당신은 아무데도하지 않고 기본적으로 모두 입력 값을 하나의 동일한 bean 특성에 바인딩합니다. 따라서 폼이 제출되면 모든 반복은 마지막 반복 라운드의 값을 얻을 때까지 현재 반복 라운드의 값으로 매번 빈 속성을 무시합니다. 이것은 옳지 않습니다.

가장 간단한 방법은 직접 var으로 표시 객체와 연결하는 것입니다 : 특정 경우

<p:selectOneRadio value="#{question.selectedOption}"> 

은 "답"모델이 유일한 꽉 커플은 "질문"모델. 그들을 분리시켜 두는 것이 합리적입니다. 현재 키와 #{question} 반복하여 특정한 경우에 더 적절한 해결책은 (는 적절한 equals()hashCode() 구현을 가지고 제공 분명히) 매핑하는 것입니다

<p:selectOneRadio value="#{formData.selectedOptions[question]}"> 

으로 :에 관계없이

private Map<Question, String> selectedOptions = new HashMap<>(); 

접근 방법의 경우 액션 메소드에서 모든 것을 수집하기 위해 반복합니다.

+0

지도 접근 방식을 사용하고 있으므로지도를 지울 수있는 적절한 위치는 무엇입니까? 세션 범위 관리 Bean을 사용하여 두 번째로 시험을 진행하는 것이 맞습니까? 마지막으로 jpa Entity 객체를 JSF 페이지에 전달하는 올바른 방법이 무엇인지 알아야합니다. – eatSleepCode

+0

@eatSleepCode : http://stackoverflow.com/q/7031885 – BalusC

+0

감사합니다. JPA 엔티티가 jsf 레이어로 들어가는 좋은 관행에 대해 몇 가지 생각을 나누시겠습니까? – eatSleepCode