2015-01-06 3 views
1

Мне нужно отображать <p:selectManyCheckbox> элементы с изображениями. Я попытался отобразить изображения с помощью <p:selectOneRadio>. Он работает нормально. Я программно добавляю компоненты в интерфейс. Это мой код.Как отображать элементы с изображением в 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 имеет только <p:radioButton> для пользовательских layoue, а не <p:checkbox>. Как я могу это достичь? Как я могу отображать <p:selectManyCheckbox> элементов с изображениями?

+1

Что касается декларирования/создания компонентов: нет ничего **, что невозможно в XHTML и возможно только на Java. Эта Java в основном является нечитаемым беспорядком по сравнению с XHTML ''/''. Я настоятельно рекомендую прекратить объявление/создание компонентов в контроллере и вместо этого в представлении, как это делает любой другой здравомыслящий разработчик JSF. – BalusC

+0

Так что мне нужно делать? – Duk

+0

Просто используйте XHTML. Это намного удобнее и удобнее. – BalusC

ответ

2

Это невозможно с <p:selectManyCheckbox>. Лучше всего использовать комбинацию из <p:selectBooleanCheckbox> компонентов и изменить модель на Map<Entity, Boolean> вместо List<Entity>. Вы можете перебрать его, используя <ui:repeat>.

E.g. (Нормальный вариант XHTML, я не буду выступать за Java 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

Смежные вопросы