Reputation: 2793
Here is the problem: actionlistener does not want to be fired
@ManagedBean(name="hotelsController")
@SessionScoped
public class HotelsController implements Serializable {
public void requestHotelAvail(ActionEvent event) {
request = new Request(df.format(arrivalDate), df.format(departureDate));
}
}
and xhtml
<h:panelgroup id="rooms"/>
<h:form id="hotelSearch">
<p:commandButton actionListener="#{hotelsController.requestHotelAvail}" value="submit" update="rooms" />
</h:form>
I have tried everything I could search of changed @managedbean
to @component
set import
to import javax.faces.event.ActionEvent;
But it still does not fire anything.
Form is in a p:accordion
and when used with h:commandbutton
it works fine
EDIT: sorry for mislead. rooms updates after click but actionListener is not fired. so rooms will not get any new data. Important code in requestHotelAvail
needs to be fired before updating rooms and its not.
EDIT2: PrimeFaces 2.2.1
- I've read whole manual to primefaces but theres no explanation to this as I've done all that it states
I've tried using action
instead of actionListener
without ActionEvent
but it never do anything. using <h:commandbutton action="#{hotelscontroller.requestHotelAvail}"/>
works great but I want that ajax engine to refresh only that rooms
panelgroup
UPDATE: Now it works. Form couldn't be in <p:accordion>
but why and how to enable it there? Form now I'll work without it.
Upvotes: 3
Views: 13751
Reputation: 2658
You try to inspect the response:
Open Chrome or Firefox -> Inspect Element -> Network and follow the ajax call.
Upvotes: 0
Reputation: 12870
I suspect the different behavior from h:commandLink comes from ajax/non-ajax processing.
By default - if you don't use f:ajax - h:commandLink is non-ajax and entire page is rerendered. Primefaces p:commandLink is using ajax and you indicate rooms as component to be updated. In your case rooms is outside form so it should rather be addressed as :rooms (mind the colon) instead of just rooms.
update: have you tried ajax with h:commandLink? It would be:
<h:commandButton action="#{hotelscontroller.requestHotelAvail}" value="submit">
<f:ajax render=":rooms"/>
</h:commandButton>
Also I'm not that familiar with primefaces but maybe you can try to explicitly indicate the component to process with additional process="@this"
- although I would assume this to be default as in basic library.
Upvotes: 3