我是JSF的新手。我正在使用 JSF 2,并且我的 bean 文件正在填充一个列表。在我的.xhtml文件中,我想将此信息显示为 2 列。
在豆类中列出模块;(包含模块。启用 module.name)
该列表有 30 个模块。我想在 2 列中显示所有这些模块信息。例如:我想在一列中显示第一个模块信息(模块 module.name),在第二列中显示第二个模块信息。或者它可以是第一列中的前 15 个模块和第二列中的其余 15 个模块。尝试使用h:dataTable和h:panelGrid,但无法使其工作。
任何帮助将不胜感激。
谢谢希朱
使用 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}">
</td></tr><tr><td>
</f:verbatim>
<f:verbatim rendered="#{status.index mod 2 == 0}">
</td><td>
</f:verbatim>
</ui:repeat>
</h:panelGrid>
通过使用一些<h:dataTable>
属性的值,我们可以做这样的东西:属性 first
表示要从列表中开始显示的第一个索引,而rows
的 1 表示从设计的开始索引开始显示行号(如果显式),否则,它从第一行显示,依此类推。
这是一个启动示例,依赖于一个<h:panelGrid coulmns="2">
中包含的 2 个<h:dataTalbe>
标签,并且仅依靠 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">