想要在单击按钮后显示填充了数据的数据表

时间:2013-06-05 09:24:44

标签: jsf-2 primefaces

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

<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>标记内。

托管Bean searchBean位于@ViewScoped

1 个答案:

答案 0 :(得分: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属性。