我想以这种方式编写代码,如果我点击一个按钮,则会出现一个数据表,其中包含数据。在此之前,不应该有视图中的数据表。
<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
。
答案 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
属性。