3
votes
<h:form prependId="false">

<p:dialog modal="true">

<p:commandLink ajax="true" value="ok" actionListener="Bean.listenerMethod"/>

</p:dialog>

</h:form>

I had some other controls too inside the form. When the link is clicked that listener was not fired. What might be the problem? please help!

3
Is this the exact code? There's a very obvious error, but I wouldn't like to play for Captain Obvious. - BalusC
Sorry I put commandLink instead instead of commandButton. is that the error BalusC? - Selvin
No, your actionListener isn't a method expression. It's a plain string. - BalusC
I ve previously used this notation(Bean.listenerMethod") to invoke the listeners. And it worked. Do you mean the correct notation is "Bean.listenerMethod()"? - Selvin

3 Answers

2
votes

You need to declare it as EL method expression, not as a plain string.

actionListener="#{Bean.listenerMethod}"

To be sure, the #{Bean} must be a valid managed bean with the managed bean name "Bean" which in turn contains the following method

public void listenerMethod(ActionEvent event) {
    // ...
}

where ActionEvent is from the javax.faces package and not the java.awt one.

If that still doesn't work, then it's caused by something else. E.g. the form is nested, the rendered attribute evaluated false, etc. For an overview, see this answer.

1
votes

You should use <h:commandLink action="... /> instead of <p:commandLink actionListener="... />

Example:

<h:commandLink id="elimina"
   action="#{listaBonificiModel.eliminaSelezionato()}"
   update="@(form)" oncomplete="PF('bonificoDialog').hide()"
   value ="Elimina" />
0
votes

Try

<h:form id="mainform">
    __________
    __________
    <p:dialog id="test" widgetVar="Testing">
       <h:form>
          <h:panelGrid columns="1">
             _________
             _________
          </h:panelGrid>
          <p:commandLink ajax="true" update="mainform" process="@all" value="ok" actionListener="#{Bean.listenerMethod}" oncomplete="Testing.hide()"/>
      </h:form>
    </p:dialog>
</h:form>

Thank you