我的方案如下:我有一个primefaces p:treeTable
,其中包含要下载的日志文件。如果我选择的节点不为空,则没有问题,文件将被下载,树将保持扩展,以便我可以从同一节点下载其他文件,但如果所选节点为空或有一些Exception
,我想显示一条消息而不会崩溃用户已经扩展的所有节点。这就是我想要避免的行为,因为所有树都崩溃了。
我正在寻找一个解决方案,并尝试实现this link中暴露的一些解决方案,但没有人适合我。
这是我的 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
获取文件,我会显示一条消息,然后是树崩溃的时候。
任何人都可以告诉我如何避免这种行为?
提前致谢!!