JSF 2 отображает список значений в 2 столбцах

Я новичок в JSF. Я использую JSF 2, и мой файл bean-компонента заполняет список. В моем файле.xhtml я хочу отобразить эту информацию в виде 2 столбцов.

В модуле класса Bean список модулей;(Содержит module.enable module.name)

Список насчитывает 30 модулей. Я хочу отобразить информацию обо всех этих модулях в 2 столбцах. Например: я хочу отобразить информацию о первом модуле (module.enable module.name) в одном столбце, а второй - во втором столбце. Или это могут быть первые 15 модулей в первом столбце и оставшиеся 15 во втором столбце. Пробовал с h:dataTable и h:panelGrid, но не смог заставить его работать.

Любая помощь будет высоко оценен.

Спасибо шую

2 ответа

Это мой код для решения проблемы с помощью свойства varStatus пользовательского интерфейса:repeat

   <h:panelGrid  id="moduleList" columns="2" border="1" >
        <f:facet name="header">
            <h:outputText value="Modules"/>
        </f:facet>
        <ui:repeat  value="#{EnableCodeBean.modules}"  var="modules" varStatus="status">
            <h:panelGroup>
                <h:selectBooleanCheckbox value="#{modules.enable}"/>
                <h:outputText value="#{modules.name}"/>
            </h:panelGroup>
            <f:verbatim rendered="#{status.index mod 2 == 1}">
                &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;
            </f:verbatim>
            <f:verbatim rendered="#{status.index mod 2 == 0}">
                &lt;/td&gt;&lt;td&gt;
            </f:verbatim>
        </ui:repeat>
    </h:panelGrid>

Играя с некоторыми <h:dataTable>'атрибуты' значения, мы можем сделать что-то вроде этого: атрибут first, указывает на первый индекс списка, с которого нужно начать отображение, и rows1 указывает номер строки, которая будет отображаться, начиная с начального индекса, созданного в случае экспликации, в противном случае он отображается с 1-й строки и т. д.

Вот пример этого, опираясь на 2 <h:dataTalbe> теги включены в один <h:panelGrid coulmns="2">и полагаться только на 4 модуля для упрощения, по 2 на каждый столбец. каждый <h:dataTable> тег должен иметь другое значение его first атрибут:

Бэк-бин:

@ManagedBean
@RequestScoped
public class ModuleBacking{

private List<Module> modules = new ArrayList<Module>();

public ModuleBacking() {
}

@PostConstruct
public void insertion() {
    Module m1 = new Module("math",true);
    Module m2 = new Module("english",false);
    Module m3 = new Module("physics",false);
    Module m4 = new Module("chimics",true);        
    modules.add(m1);
    modules.add(m2);
    modules.add(m3);
    modules.add(m4);
}

public List<Module> getModule() {
    return modules;
}

public List<Module> displayModules(){
    return modules;
}

}

Вид:

    <h:body>
    <h:panelGrid columns="2" cellspacing="3" cellpadding="3" style="border-style:   solid" rules="all" >
        <f:facet name="header">
            <h:outputText value="First 2 modules" style="padding-right:80px "/>
            <h:outputText value="Second 2 modules"/>
        </f:facet>
            <h:dataTable value="#{moduleBacking.displayModules()}" var="m" rules="all" first="0" rows="2">
                <h:column>
                        <f:facet name="header" ><h:outputText value="Module's name" /></f:facet>
                        <h:outputText value="#{m.name}" />
                </h:column>
                <h:column>
                    <f:facet name="header" ><h:outputText value="Module's enabling" /></f:facet>
                    <h:outputText value="#{m.enable}" />
                </h:column>
            </h:dataTable>
            <h:dataTable value="#{moduleBacking.displayModules() }" var="m" rules="all" first="2" rows="2">
                <h:column>
                        <f:facet name="header" ><h:outputText value="Module's name" /></f:facet>
                        <h:outputText value="#{m.name}" />
                </h:column>
                <h:column>
                    <f:facet name="header" ><h:outputText value="Module's enable" /></f:facet>
                    <h:outputText value="#{m.enable}" />
                </h:column>
            </h:dataTable>

    </h:panelGrid>  
</h:body>

В вашем случае два <h:dataTable> кажется, вот так:

<h:dataTable value="#{moduleBacking.displayModules()}" var="m" rules="all" first="0" rows="15">

<h:dataTable value="#{moduleBacking.displayModules()}" var="m" rules="all" first="15" rows="15">
Другие вопросы по тегам