Action not triggered when button is enabled/disabled with ajax

匆匆过客 提交于 2020-01-06 13:52:43

问题


I am stuck with a problem that doesnt make any sense to me. I have a listbox which fires selectionChange-Events with simple Ajax. The idea is that the edit-button isnt enabled until a item in the list is selected. So I created the following code.

<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>

The button is enabled and disabled as I wish but as it turns out, the edit-button isnt triggering any action (I added some sysout to the add- and edit-method in the bean and the edit-method is never called)...instead the html changes. The above code is nested in a simple div. When I click edit, the whole form is outside of that div.

When I add this ajax-behavior to the add-button, the same happens there and vice versa, when I remove the disabled-attribute from the edit-button everything works???

I already had a look at BalusC answer here but I couldnt find any mistake related to that list. No nested forms and so on...its just a simple page with a template.

I am using Mojarra 2.1.2 on JBoss 7.1.Final.

Any help is appreciated. Thanks


回答1:


This issue is covered by point 5 of the answer which you've linked.

The rendered attribute of the component and all of the parent components should not evaluate to false during the apply request values phase of the form submit request. JSF will namely recheck it then as part of safeguard against tampered/hacked requests. Putting the bean in the view scope and/or making sure that you're preinitializing the condition in (post)constructor of the bean should fix it. The same applies to the disabled attribute of the component, which should not evaluate to true during processing the form submit.

I suggest to change @RequestScoped on BikeManagementPanelBean to @ViewScoped.




回答2:


try something like this

<h:commandButton id="edit" value="#{msgs.edit}"
    disabled="#{bikeManagementPanelBean.editButtonDisabled eq false}"
    action="#{bean.edit}" />

try to wrap it again with the <h:panelGroup> and render the instead of the button...



来源:https://stackoverflow.com/questions/9393411/action-not-triggered-when-button-is-enabled-disabled-with-ajax

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!