Jsf 2 JSF2在两列中显示列表值

Jsf 2 JSF2在两列中显示列表值,jsf-2,datatable,panelgrid,Jsf 2,Datatable,Panelgrid,我是JSF的新手。我使用的是JSF2,有一个列表由我的bean文件填充。在我的.xhtml文件中,我想将此信息显示为两列 在bean类中 列出模块;(包含module.enable module.name) 这个列表有30个模块。我想在两列中显示所有这些模块信息。例如:我想在一列中显示第一个模块信息(module.enable module.name),在第二列中显示第二个模块信息。也可以是第一列中的前15个模块,第二列中的其余15个模块。尝试使用h:dataTable和h:panelGrid,

我是JSF的新手。我使用的是JSF2,有一个列表由我的bean文件填充。在我的.xhtml文件中,我想将此信息显示为两列

在bean类中 列出模块;(包含module.enable module.name)

这个列表有30个模块。我想在两列中显示所有这些模块信息。例如:我想在一列中显示第一个模块信息(module.enable module.name),在第二列中显示第二个模块信息。也可以是第一列中的前15个模块,第二列中的其余15个模块。尝试使用h:dataTable和h:panelGrid,但无法使其工作

任何帮助都将不胜感激

谢谢
Shyju

通过使用一些
的属性值,我们可以制作如下内容: 属性
first
,id指向列表中开始显示的第一个索引,
行的id指向要显示的行数,如果指定,则从设计的起始索引开始显示,否则从第一行开始显示,依此类推

这里有一个这样的开始示例,依赖于一个
中包含的2个
标记,并且仅依赖4个模块来简化,每个列2个。每个
标记的
第一个属性的值必须不同:

支持bean:

@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;
}

}
@ManagedBean
@请求范围
公共类模块备份{
私有列表模块=新的ArrayList();
公共模块备份(){
}
@施工后
公共空白插入(){
模块m1=新模块(“数学”,真);
模块m2=新模块(“英语”,错误);
模块m3=新模块(“物理”,假);
模块m4=新模块(“chimics”,真);
模块。添加(m1);
模块。增加(m2);
增加模块(m3);
模块。添加(m4);
}
公共列表getModule(){
返回模块;
}
公共列表显示模块(){
返回模块;
}
}
观点:

    <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 value="#{moduleBacking.displayModules()}" var="m" rules="all" first="0" rows="15">

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

这是我使用ui:repeat的varStatus属性解决问题的代码

   <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>

/td/TRTD
/tdtd

非常感谢您的帮助。我试过了,效果很好。但是现在我意识到我的模块类信息是从数据库中读取的,所以我们不知道事先有多少项。因此,我不得不想出另一个目前效果良好的解决方案。我想发布代码,但我无法发布,因为我是这个论坛的新成员。再次感谢你的帮助,不客气。如果我们不知道将要读取和显示的模块实例的有效数量,那么我们可以使用EL表达式而不是常量来执行此操作:
嗯。这也是我可以尝试的。非常感谢你的帮助。