2015-01-06 3 views
1

이미지가있는 <p:selectManyCheckbox> 항목을 표시해야합니다. 나는 <p:selectOneRadio>으로 이미지를 표시하려고 시도했다. 그것은 잘 작동합니다. UI에 구성 요소를 프로그래밍 방식으로 추가하고 있습니다. 이것은 내 코드입니다.p : selectManyCheckbox에 이미지가있는 항목을 표시하는 방법

answerRadio.setLayout("custom"); //answerRadio is SelectOneRadio 
customPnl = (PanelGrid) app.createComponent(PanelGrid.COMPONENT_TYPE); 
      customPnl.setId("pnl"+qstnCnt); 
      customPnl.setColumns(3); 
radioBtn = (RadioButton) app.createComponent(RadioButton.COMPONENT_TYPE); 
         radioBtn.setId("opt"+qstnAnsIndx); 
         radioBtn.setFor("ID of answerRadio"); 
         radioBtn.setItemIndex(ansIndx); 
         customPnl.getChildren().add(radioBtn); 

outPnl.getChildren().add(answerRadio); //outPnl is OutputPanel that include answerRadio 
outPnl.getChildren().add(customPnl); 

이미지가있는 <p:selectOneRadio>입니다.

동일한 방식으로 <p:selectManyCheckbox>을 사용하고 싶습니다. 하지만 PrimeFaces는 사용자 정의 layoue에 대해서만 <p:radioButton>이며 <p:checkbox>이 아닙니다. 어쨌든 어떻게 할 수 있습니까? 이미지가있는 <p:selectManyCheckbox> 개의 항목을 표시하려면 어떻게해야합니까?

+1

구성 요소 선언/생성과 관련하여 ** XHTML에는 불가능하고 Java에서만 가능합니다 **는 없습니다 **. XHTML'

'/'

과 비교했을 때, 자바는 기본적으로 읽을 수없는 엉망이다. 다른 모든 제법 좋은 JSF 개발자와 마찬가지로 컨트롤러에서 컴포넌트 선언/생성을 중단하고 뷰에서 중지하는 것이 좋습니다. – BalusC

+0

그래서 무엇을해야합니까? – Duk

+0

XHTML을 사용하기 만하면됩니다. 그것은 훨씬 더 읽기 쉽고 유지 보수가 쉽습니다. – BalusC

답변

2

<p:selectManyCheckbox>으로는 불가능합니다. 가장 좋은 방법은 <p:selectBooleanCheckbox> 구성 요소를 대신 사용하고 List<Entity> 대신 Map<Entity, Boolean>으로 모델을 변경하는 것입니다. <ui:repeat>을 사용하여 반복 할 수 있습니다.

예. (일반 XHTML의 변형, 나는 자바 createComponent() 해당하는지지 않을거야)

<ui:repeat value="#{bean.entities}" var="entity"> 
    <p:selectBooleanCheckbox value="#{bean.selection[entity]}" /> 
    ... (you can put here image, label, anything) 
</ui:repeat> 

private List<Entity> entites; 
private Map<Entity, Boolean> selection; 

@PostConstruct 
public void init() { 
    entities = service.list(); 
    selection = new HashMap<>(); // No need to prefill it! 
} 

로 선택하는 것을 확인하려면, 루프를지도를 통해 액션 방법 :

List<Entity> selectedEntities = new ArrayList<>(); 

for (Entry<Entity, Boolean> entry : selection.entrySet()) { 
    if (entry.getValue()) { 
     selectedEntities.add(entry.getKey()); 
    } 
} 
+0

대단히 감사합니다. @BalusC – Duk

+0

사실입니다. – Duk