Primefaces 如何使用按钮或命令按钮折叠primesfaces数据表?

Primefaces 如何使用按钮或命令按钮折叠primesfaces数据表?,primefaces,datatable,commandbutton,Primefaces,Datatable,Commandbutton,我想通过单击primefaces数据表的命令按钮来显示或隐藏它们,我有一个java bean,可以调用java函数dashboardView.displayOrHide()。我不知道该怎么做 我想显示或隐藏datatable,或者通过单击按钮来折叠它,并将datatable的状态保存在JavaBean中 我的Primefaces版本是6.0.15 我的JSF/xhtml代码: <p:commandButton value="Show Or Hide" id="ajax" action="#

我想通过单击primefaces数据表的命令按钮来显示或隐藏它们,我有一个java bean,可以调用java函数dashboardView.displayOrHide()。我不知道该怎么做

我想显示或隐藏datatable,或者通过单击按钮来折叠它,并将datatable的状态保存在JavaBean中

我的Primefaces版本是6.0.15

我的JSF/xhtml代码:

<p:commandButton value="Show Or Hide" id="ajax" action="#{dashboardView.displayOrHide}" style="margin-right:20px;" styleClass="ui-priority-primary" />

<p:dataTable id="item_#{synopticLocationBean.id}" var="synopticIdBean" value="#{synopticLocationBean.synopticIdBeans}">
   <p:column headerText="Famille">
       <h:outputText value="#{synopticIdBean.family}" />
   </p:column>

   <p:column headerText="BT">
      <h:outputText value="#{synopticIdBean.brNumber}"/>
   </p:column>
</p:dataTable>
目前,我使用带有按钮的javascript函数

使用displayTabInformation js函数隐藏或显示我的数据表:

function displayTabInformation(id,dataTableId){

    var divDisplay = dataTableId.style.display;

    if(divDisplay === ''){
        dataTableId.style.setProperty('display', 'none');
    }else if(divDisplay === 'none'){
        dataTableId.style.setProperty('display', 'block');
    }else{
        if(divDisplay === 'visible'){
            dataTableId.style.setProperty('display', 'none');
        }else{
            if(divDisplay === 'block'){
                dataTableId.style.setProperty('display', 'none');
            }
        }
    }
}
public void showOrHideLocation(String id) {

    SynopticLocationBean synopticLocationBean = getLocation(id);
    boolean isCollapsed = synopticLocationBean .getCollapseDataTable();
    location.setCollapseDataTable(!isCollapsed);

//TODO How can i refresh my JSF page with my java bean ?
}

我想用JavaBean创建相同的函数来保存显示或隐藏哪个数据库。

我添加了一个命令按钮,用于从java托管bean调用函数。我在datatable的“呈现”中使用了一个布尔标志,它在showOrHideLocation函数中设置为true或false

我不知道如何从Java托管bean刷新JSF页面

<p:commandButton value="#{synopticLocationBean.name}" update="item_#{synopticLocationBean.id}" action="#{dashboardView.dashboardService.showOrHideLocation(synopticLocationBean.id)}" styleClass="ui-priority-primary" ajax="true" />

<p:dataTable id="item_#{synopticLocationBean.id}" var="synopticIdBean" value="#{synopticLocationBean.synopticIdBeans}"
    sortBy="#{synopticIdBean.longEnteredTime}" sortOrder="ascending"
    rowStyleClass="#{synopticIdBean.alarm eq true ? 'old' : null}"
    rendered="#{synopticLocationBean.collapseDataTable eq true}">

    <p:column headerText="Famille">
        <h:outputText value="#{synopticIdBean.family}" />
    </p:column>

    <p:column headerText="BT">
        <h:outputText value="#{synopticIdBean.brNumber}"/>
    </p:column>


分解你的问题。如何“折叠”普通html表?在这里也一样。。。客户端都是html、css和Javascript目前我使用的JS方法是“dataTableId.style.setProperty('display','block');”,或者不阻止,但我不知道如何使用java方法和java方法显示的参数id,或者不使用JSF/primefaces组件。这表明你至少有一些基本的工作。我不知道你所说的“我不知道如何使用java方法的参数id,在java方法显示中使用参数id,或者不使用JSF/primefaces组件”是什么意思。。。最好在问题中写“伪代码”,使问题更清楚。Cheres为什么不将这两种解决方案结合起来?例如,在commandbutton的点击中,客户端隐藏并仅通知服务器隐藏?那么就不需要更新页面了。。。顺便说一句,您已经在尝试更新东西,因为commandButtonOk上有
update
属性,用于组合这两个解决方案,但是我应该如何从javascript函数中的托管bean调用java函数呢?java有方法,javascript有函数。因此,前面评论中的问题对我来说并不清楚。除此之外,commandButton已经调用了服务器,您在commandButton上的onclick可以用来调用上面提到的客户端javascript,所以我不明白您认为这是一个什么问题(删除了一些代码)应该这样做
,实际上这不是一个答案。。。那么,showOrHideLocation中的刷新就无关紧要了
public void showOrHideLocation(String id) {

    SynopticLocationBean synopticLocationBean = getLocation(id);
    boolean isCollapsed = synopticLocationBean .getCollapseDataTable();
    location.setCollapseDataTable(!isCollapsed);

//TODO How can i refresh my JSF page with my java bean ?
}