【发布时间】:2011-05-16 06:35:41
【问题描述】:
<h:form>
<fieldset>
<h:selectManyListbox id="listbox" value="#{form.items}">
<f:selectItems value="#{form.allItems}">
</h:selectManyListbox>
</fieldset>
<h:commandButton value="Get Table" action="#{form.getTable}">
<f:ajax render="result_table" execute="listbox" />
</h:commandButton>
<h:panelGrid id="result_table">
<table>
<thead></thead>
<tbody>
<ui:repeat var="table" value="#{form.resultTable}">
<tr>
<td>#{table.name}</td>
<td>
<h:selectBooleanCheckbox binding="#{showMore}">
<f:ajax render="inner" />
</h:selectBooleanCheckbox>
</td>
</tr>
<tr>
<td>
<h:panelGrid id="inner" rendered="#{not empty showMore.value and showMore.value}">
<table></table>
</h:panelGrid>
</td>
</tr>
</ui:repeat>
</tbody>
</table>
</h:panelGrid>
</h:form>
我遵循了 BalusC here 的复选框示例代码。
当我单击命令按钮时,它会根据列表框的值生成一个表格结果,我显示在h:panelGrid id="result_table" 中。此命令按钮有效。在生成的表中,我有一些要显示的子表,但前提是我选中该框以显示它们。对于复选框,如果我使用render="@form",它会折叠我的外部父表。如果我使用render="inner" 选中/取消选中框什么都不做。
如何让它工作?是不是因为两个ajax冲突了?
仅供参考,我也尝试使用 bean 属性,但得到了相同的结果。当我尝试使用同一链接中提到的 javascript 方法时,但选中/取消选中该框无效。
更新为在上面添加示例 sn-p 和 <ui:repeat></ui:repeat>:
<h:selectBooleanCheckbox binding="#{showMore}">
<f:ajax render="inner" />
</h:selectBooleanCheckbox>
<h:panelGrid id="inner">
<h:outputText value="always" />
<h:outputText value="hidden" rendered="#{not empty showMore.value and showMore.value}" />
</h:panelGrid>
【问题讨论】:
-
我很难在代码中看到问题并将其与您的问题信息相关联。你不是把代码 sn-p 过分简化了吗?我希望
result_table左右有另一个rendered属性。考虑发布完整的工作 SSCCE 以 XHTML 文件和托管 bean 的形式,其中包含重现问题所需的最少必要代码。 -
不幸的是,我的代码在 Intranet 上的另一台计算机上,我无法发布完整的代码。我更改了代码并重新措辞了问题,希望它更清楚。
-
啊,对,您在原始示例中省略了
id="inner"。现在你的意思更清楚了。
标签: java ajax jsf jsf-2 facelets