Setting the "immediate" attribute true on a "tabPanel" has a strange effect -- if the page is submitted by a "commandButton" which is not "immediate='true'", it nevertheless behaves as though it was immediate because the field with "required='true'" does not generate an error. In addition the ajax submission also ends up behaving as it too is "immediate" (no error for the empty field, and the "id='echoField' " component is not updated.
If the tabPanel is made non-immediate, the expected behaviour happens.
This appears to be a bug, or am I not understanding what making a tabPanel immediate is supposed to do. I assume it is to allow the selected tab to be changed but short circuiting the life cycle. So why then would a component that is not even a child of the tabPanel be affected??
<%@ taglib uri="http://richfaces.org/rich" prefix="rich"%> <%@ taglib uri="http://richfaces.org/a4j" prefix="a4j" %> <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %> <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %> <html> <head> <title>repeater</title> </head> <body> <f:view> <h:form id="form"> <rich:panel header="Errors"> <rich:messages/> </rich:panel> <rich:panel header="Simple Echo"> <h:inputText size="50" value="#{bean.text}"> <a4j:support event="onkeyup" reRender="rep"/> </h:inputText> <h:outputText id="echoField" value="#{bean.text}" id="rep"/> </rich:panel> <rich:panel header="Simple Echoless"> <h:inputText id="in1" size="50" value="#{bean.junk}" required="true"/><br/> <rich:message for="in1"/><br/> <h:outputText value="#{bean.junk}" id="nonrep"/> <h:commandButton value="Submit"/> </rich:panel> <rich:tabPanel id="tabPanel" selectedTab="t2" switchType="server" immediate="true"> <rich:tab id="t1" label="TabOne"> <h:outputText value="Content1"/> </rich:tab> <rich:tab id="t2" label="TabTwo"> <h:outputText value="Content2"/> </rich:tab> </rich:tabPanel> </h:form> </f:view> </body> </html>
This maybe related to http://jira.jboss.com/jira/browse/RF-258