如何在表的更新中保持primefaces rowexpansion开放?

时间:2017-04-24 22:01:58

标签: jsf primefaces

您好我有一个带有p:rowToggler的数据表,所以当从行expasion启动弹出窗口时,关闭弹出窗口后我需要更新行中的一些标签。更新有效!但行扩大了,崩溃了。如何在关闭弹出窗口并更新内容后继续打开行扩展。感谢。

PopUp片段

  

 <p:ajax event="close"  update=":id1:id2"  oncomplete="someJavascript()" />
     

Databable片段

<h:form prependId="false" id="id1"> 
            <h:panelGroup id="id2" >
                  <p:dataTable tableStyleClass="win" var="element"                                id="table1" value="#{myBean.list}"
                            selectionMode="single"  rowExpandMode="single" rowIndexVar="cont" widgetVar="table1"
                           selection="#{myBean.selectedRecord}" rowKey="#{element.id}"   >
<p:ajax event="rowToggle"    listener="#{myBean.methodBean(element)}" /> 
                     <p:column styleClass="rowTogglerStyle" 
<p:rowToggler collapseLabel="#{bundle.show}" 
 expandLabel="#{bundle.show}">
</p:rowToggler>                    
</p:column> 

</p:datatable>  </h:panelGroup>  </h:form>

2 个答案:

答案 0 :(得分:2)

如果您保存展开的行元素ID,则可以这样做:

<p:dataTable expandedRow="#{element.id == myBean.expandedRowElementId}">
    <p:ajax event="rowToggle" listener="#{bean.setExpandedRowElementId(element.id)}"/>

为防止再次打开它,您需要稍微修改一下设置器:

public void setExpandedRowElementId(String expandedRowElementId){
  if(this.expandedRowElementId != null && expandedRowElementId.equals(this.expandedRowElementId) 
  // if the id is equal the expansion is closed, so the expanded element must be set to null
     this.expandedRowElementId = null;
  else
     this.expandedRowElementId = expandedRowElementId;
}

答案 1 :(得分:0)

嗨,问题是关闭弹出窗口后所选的行扩展还有类ui-state-highlight,所以我发现在p:ajax中的onclomplete atributte中通过javascript重新打开关闭的rowexpansion:

jQuery('tr.ui-state-highlight')。find('td.rowTogglerStyle&gt; div.ui-row-toggler')。trigger('click');

我希望它对其他人有用。