【发布时间】:2012-02-22 10:53:40
【问题描述】:
我遇到了一个对我没有任何意义的问题。我有一个使用简单 Ajax 触发 selectionChange-Events 的列表框。这个想法是在选择列表中的项目之前不会启用编辑按钮。所以我创建了以下代码。
<h:form>
<h:selectManyListbox value="#{bean.selectedIds}">
<f:selectItems value="#{bean.listOfItems}" />
<f:ajax render="edit"
listener="#{bean.selectionChanged}" />
</h:selectManyListbox>
<br />
<h:commandButton id="add" value="#{msgs.add}"
action="#{bean.addNew}" />
<h:commandButton id="edit" value="#{msgs.edit}"
disabled="#{bean.editButtonDisabled}"
action="#{bean.edit}" />
</h:form>
该按钮已按我的意愿启用和禁用,但事实证明,编辑按钮没有触发任何操作(我在 bean 中的 add-和 edit-method 中添加了一些 sysout,并且从未调用 edit-method )...而不是 html 更改。上面的代码嵌套在一个简单的 div 中。当我单击编辑时,整个表单都在该 div 之外。
当我将此 ajax 行为添加到添加按钮时,同样的情况也会发生,反之亦然,当我从编辑按钮中删除禁用属性时,一切正常???
我已经查看了 BalusC 的答案 here,但我找不到与该列表相关的任何错误。没有嵌套的表单等等……它只是一个带有模板的简单页面。
我在 JBoss 7.1.Final 上使用 Mojarra 2.1.2。
感谢任何帮助。谢谢
【问题讨论】:
-
您不需要重新渲染整个表单,因为 commandButton 操作将附加到 html 表单元素?
-
我试过了,但没有帮助。此外,为什么我需要呈现表单?我希望由此创建的 JavaScript 只会更改 DOM 树中的按钮。
-
这只是一个猜测。我不太确定禁用/启用是如何实现的。您是否尝试过相同的渲染,例如有两个按钮有条件地呈现?
-
还没有。但是当我记得当时使用“渲染”时,我必须重新加载整个页面,这有点多。