我对 JSF 和 Primefaces 比较陌生,但我的任务是尝试减少旧代码库中发出的 AJAX 请求量。这个问题来自一个特定的示例,其中我们有一个列出文件和文件夹的 UI 的目录。
<p:dataTable id="directoryTable" var="directoryObject" value="#{fileCabinet.folderContents}"
resizableColumns="true" scrollable="true"
rowKey="#{directoryObject}" selectionMode="single"
selection="#{fileCabinet.currentObject}" dblClickSelect="true"
sortMode="multiple" emptyMessage="This folder is empty"
sortFunction="#{dataTableUtil.sort}">
<c:if test="#{directoryObject.objectType eq 'DIRECTORY'}">
<p:ajax event="rowSelect" listener="#{fileCabinet.onRowSelect}"
update=":form:directoryTable :menu" />
</c:if>
为了简洁起见,我排除了数据表的其余部分。使用此代码,即使“test”表达式在稍后的 html 元素的后续“rendered”属性中计算得非常好,ajax 事件也永远不会附加。不幸的是,p:ajax 不支持“渲染”条件。
我也尝试过 c:choose/c:when,得到相同的结果。
这感觉应该很容易做到!我可能缺少一些简单的语法来完成这项工作。
谢谢!
最佳答案
我通过使用disabled
修复了这个问题<p:ajax>
的属性以我的条件作为值(当然是否定的)。
<p:ajax event="rowSelect"
listener="#{fileCabinet.onRowSelect}"
update=":form:directoryTable :menu"
disabled="#{directoryObject.objectType ne 'DIRECTORY'}" />
关于jsf - 有条件地将 AJAX 事件应用于数据表行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34032051/