Whenever an UICommand component (<h:commandXxx>, <p:commandXxx>, etc) fails to invoke the associated action method, or an UIInput component (<h:inputXxx>, <p:inputXxxx>, etc) fails to process the submitted values and/or update the model values, and you aren't seeing any googlable exceptions and/or warnings in the server log, also not when you configure an ajax exception handler as per Exception handling in JSF ajax requests, nor when you set below context parameter in web.xml,
Click the Network tab to see the HTTP traffic monitor. Submit the form and investigate if the request headers and form data and the response body are as per expectations. Below screenshot is an example from Chrome which demonstrates a successful ajax submit of a simple form with a single <h:inputText> and a single <h:commandButton> with <f:ajax execute="@form" render="@form">.
In the server side, make sure that server is started in debug mode. Put a debug breakpoint in a method of the JSF component of interest which you expect to be called during processing the form submit. E.g. in case of UICommand component, that would be UICommand#queueEvent() and in case of UIInput component, that would be UIInput#validate(). Just step through the code execution and inspect if the flow and variables are as per expectations. Below screenshot is an example from Eclipse's debugger.
your 2nd point made me think -- for a long while. I just found out that an f:view tag in my main file was the cause of most of my problems. And probably because it renders a form, right?
@pauloguedes I cant find anything that states that f:view renders a form. My understanding is that it is just a container. In my experience, f:view does not render any elements.
@balusc A little clarification on point 4, if the commandLink is not in the dataTable itself, does it still matter?
Your problem does not match 10. Your problem is that the form in the error page is submitting to an invalid URL. Depending on the functional requirement of those command links, better make them plain links instead, for sure if it's for pure page-to-page navigation.
@Kukeltje: that would have thrown an EL exception (already covered by 1st paragraph in the answer)