p:treeTable сворачивается, если выбранный узел имеет значение null и отображается сообщение

Мой сценарий следующий: у меня есть primefaces p:treeTable, который содержит файлы журналов для загрузки. Если мой выбранный узел не нулевой, нет проблем, файл будет загружен, а дерево останется расширенным, чтобы я мог загружать другие файлы с того же узла, но если выбранный узел нулевой или есть какой-то Exception, мне понравится чтобы отобразить сообщение без сворачивания всех узлов, которые пользователь уже расширил. Это поведение, которого я хочу избежать, поскольку все дерево рушится.

Я ищу решение и пытаюсь реализовать некоторые из представленных в этом ссылка но у меня никто не работает.

Вот мой xhtml:

<p:outputPanel id="log">                
    <div style="height:35px;">
        <p:commandButton id="btnDownload" value="Download" 
            actionListener="#{loggerView.download}" ajax="false" icon="ui-icon-arrowthick-1-s" 
            styleClass="ui-priority-primary">
            <p:fileDownload value="#{loggerView.file}" />
        </p:commandButton>
    </div>
    <p:treeTable id="tableLogs" 
            value="#{loggerView.tree}" 
            var="log" 
            style="width:100%;"
            selectionMode="single" 
            selection="#{loggerView.selectedLog}" >

        <f:facet name="header">
            Logs
        </f:facet>
        <p:column headerText="Log name" style="width:40%">
            <h:outputText value="#{log.nombre}" />
        </p:column>
        <p:column headerText="Last modification date" style="width:30%">
            <h:outputText value="#{log.date}" />
        </p:column>
        <p:column headerText="Log size" style="width:27%">
            <h:outputText value="#{log.kilobytes}" />
        </p:column>

    </p:treeTable>
</p:outputPanel>

И мой View:

@ManagedBean(name = "loggerView")
@ViewScoped
public class LoggerView implements Serializable {

    private DefaultTreeNode selectedLog;

    // OTHER VARIABLES, METHODS, GETTERS AND SETTERS...

    public void download() {

        if (selectedLog != null) {

            try {

                // HERE I GET MY LOG TO DOWNLOAD AND IT'S WORKING JUST FINE

            } catch (Exception e) {         
                FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "ERROR", "Getting the file!"));                            
            }       

        } else {        
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_WARN, "WARNING", "The log is null!"));        
        }

    }

}   

Как вы можете видеть, если мой selectedLog равен нулю или если я catch и Exception получаю файл, я отображаю сообщение, а затем дерево сворачивается.

Может ли кто-нибудь сказать мне, как я могу избежать этого поведения?

Заранее спасибо!!


person CarlosLeo    schedule 27.07.2016    source источник
comment
Вы можете сделать так, чтобы расширение ajax выглядело так <p:ajax event="expand" listener="#{ManagedBean.expand}" update=":tree" />   -  person Yagami Light    schedule 27.07.2016
comment
@YagamiLight, вы имеете в виду решенное решение, представленное по ссылке. упомянуть в посте? Не знаю почему, но у меня не работает :-(   -  person CarlosLeo    schedule 27.07.2016
comment
ммм... может мне нужно добавить update=":tree" к событию ajax? попробую   -  person CarlosLeo    schedule 27.07.2016
comment
Привет, извините, я пропустил ссылку, если вы не можете использовать расширение, используйте визуализацию с нулевым условием.   -  person Yagami Light    schedule 27.07.2016