0

我是JSF的新手。我正在使用 JSF 2,并且我的 bean 文件正在填充一个列表。在我的 .xhtml 文件中,我想将此信息显示为 2 列。

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

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

任何帮助将不胜感激。

谢谢诗菊

4

2 回答 2

1

这是我使用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>
于 2013-09-20T02:42:09.730 回答
0

通过使用一些<h:dataTable>'attributes' 值,我们可以做出这样的事情: attributefirst表示要开始显示的列表的第一个索引,而rows'one 表示要显示的行数如果显式,则设计起始索引,否则从第一行开始显示,依此类推。

这是一个启动示例,依赖于 1<h:dataTalbe>中包含的 2 个标签<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">
于 2013-09-19T12:25:09.863 回答