1

我想以这种方式编写代码,如果我单击一个按钮,则会出现一个数据表,其中填充了数据。在此之前不应该有数据表在视图中。

<p:commandButton value="Go" styleClass="apply_button" actionListener="#{searchBean.getUserList}">
    <f:attribute name="trigram" value="#{searchBean.trigram}"/>
    <f:attribute name="firstName" value="#{searchBean.firstName}"/>
    <f:attribute name="lastName" value="#{searchBean.lastName}"/>
</p:commandButton>

在这里,getUserList() 方法返回应填充到数据表中的数据列表。它可以工作。

<p:dataTable value="#{searchBean.listUser}" var="user">
    <p:column headerText="Trigram">
        <h:outputText value="#{searchBean.trigram}"/>
    </p:column>
</p:dataTable>

单击按钮后,它会显示在数据表中,但数据表会在单击按钮之前出现,并带有空字段。如何修改我的代码以显示在我的按钮单击后显示数据表?代码在<h:form>标签内。

托管 BeansearchBean位于@ViewScoped.

4

1 回答 1

3

您可以初始化一个简单的 getter/setter :

private boolean visible = false; // getter/setter

public void getUserList(ActionEvent event)
{
    setVisible(true);

    // Your code
}

并像这样修改您的视图:

<p:commandButton value="Go" styleClass="apply_button" actionListener="#{searchBean.getUserList}" update="table-wrapper">
    <f:attribute name="trigram" value="#{searchBean.trigram}"/>
    <f:attribute name="firstName" value="#{searchBean.firstName}"/>
    <f:attribute name="lastName" value="#{searchBean.lastName}"/>
</p:commandButton>

<h:panelGroup id="table-wrapper">
    <p:dataTable rendered="#{searchBean.visible}" value="#{searchBean.listUser}" var="user">
        <p:column headerText="Trigram">
            <h:outputText value="#{searchBean.trigram}"/>
        </p:column>
    </p:dataTable>
</h:panelGroup>

注意update按钮上的属性、h:panelGroup包装器上的rendered属性和表格上的属性。

于 2013-06-05T09:29:58.277 回答