我遇到了一个对我没有任何意义的问题。我有一个列表框,它使用简单的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-方法中添加了一些sysout,并且从不调用edit-method )...而是html的变化。上面的代码嵌套在一个简单的div中。当我单击编辑时,整个表单都在该div之外。
当我将这个ajax-behavior添加到add-button时,同样的情况发生在那里,反之亦然,当我从编辑按钮中删除disabled-attribute时一切正常???
我已经看过BalusC回答here,但我找不到与该列表有关的任何错误。没有嵌套表单等等......它只是一个带模板的简单页面。
我在JBoss 7.1.Final上使用Mojarra 2.1.2。
感谢任何帮助。感谢
答案 0 :(得分:2)
您已链接的答案的第5点涵盖了此问题。
在表单提交请求的应用请求值阶段,组件的
rendered
属性和所有父组件不应评估为false
。然后,JSF将重新检查它,作为防止篡改/黑客攻击请求的一部分。将bean放在视图范围中和/或确保你在bean的(post)构造函数中预先初始化条件应该修复它。 这同样适用于组件的disabled
属性,在处理表单提交期间不应评估为true
。
我建议将@RequestScoped
上的BikeManagementPanelBean
更改为@ViewScoped
。
答案 1 :(得分:0)
尝试这样的事情
<h:commandButton id="edit" value="#{msgs.edit}"
disabled="#{bikeManagementPanelBean.editButtonDisabled eq false}"
action="#{bean.edit}" />
尝试使用<h:panelGroup>
再次包裹它并渲染而不是按钮...