【问题标题】:How to collapse a primesfaces datatable with a button or a command button?如何使用按钮或命令按钮折叠 primefaces 数据表?
【发布时间】:2019-06-25 19:32:57
【问题描述】:

我想通过单击命令按钮来显示或隐藏 primefaces 数据表,我有一个 java bean,我可以调用 java 函数dashboardView.displayOrHide()。我不知道如何做到这一点。

我想显示或隐藏数据表,可以通过单击按钮将其折叠或不折叠,并将数据表的状态保存在 java bean 中

我的 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>

我的 Java 代码,但我不知道在这里做什么:

public void buttonAction() {
   System.out.println("test ash retor ana");
}

目前我使用带有按钮的 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');
            }
        }
    }
}

我想用 java bean 做同样的功能来保存显示或隐藏的数据库。

【问题讨论】:

  • 分解您的问题。你将如何“折叠”一个普通的 html 表格?在这里做同样的事情......客户端都是html,css和javascript
  • 目前我使用了一个 JS 方法来执行“dataTableId.style.setProperty('display', 'block');”,或者没有代替阻塞,但我不知道我可以如何使用java 方法的参数 id 和 java 方法内部是否显示我的 JSF/primefaces 组件。
  • 请在问题中添加有关如何执行此操作的 JS 示例。这清楚地表明你至少有一些基础工作。而且我不知道您所说的 “我不知道如何将参数的 id 用于 java 方法以及在 java 方法显示内部或不使用我的 JSF/primefaces 组件。” ...总是最好在问题中编写“伪代码”以使您的问题更清楚。干杯

标签: primefaces datatable commandbutton


【解决方案1】:

我添加了一个命令按钮,该按钮从 Java 托管 bean 调用函数。我有一个布尔标志,用于数据表的“渲染”,在 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>

我的 Java 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 ?
}

【讨论】:

  • 为什么不将这两种解决方案结合起来呢?例如在单击命令按钮客户端隐藏并通知服务器隐藏?那么就不需要更新页面了......顺便说一句,你已经在尝试更新内容了,因为你在 commandButton 上有 update 属性
  • 好的,为了结合这两种解决方案,但我应该如何在 javascript 函数中从托管 bean 调用 java 函数?
  • java 有方法,javascript 有函数。所以上一条评论中的问题对我来说不清楚。除此之外,commandButton 已经调用了服务器,并且您可以使用 commandButton 上的 onclick 来调用上面提到的客户端 javascript,所以我不明白您认为这是什么问题(删除了一些代码)应该这样做&lt;p:commandButton value="#{synopticLocationBean.name}"action="#{dashboardView.dashboardService.showOrHideLocation(synopticLocationBean.id)}" onclick="displayTabInformation(..., '#{synopticLocationBean.id}')" /&gt;
  • 实际上这不是一个答案......那么 showOrHideLocation 中的刷新是无关紧要的
猜你喜欢
  • 1970-01-01
  • 2012-10-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-04
  • 1970-01-01
  • 2011-12-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多