Enabling/disabling tabs programatically
As I was reading the JBoss RichFaces forum, I saw this post. Here is one possible solution.

<h:form> <h:panelGrid columns="3"> <a4j:commandButton id="tab1" value="#{tabsBean.tabsMap['tab1']?'Enable':'Disable'} Tab 1" actionListener="#{tabsBean.disable}" reRender="tab1"> <a4j:actionparam name="value" value="#{!tabsBean.tabsMap['tab1']}" assignTo="#{tabsBean.value}" /> </a4j:commandButton> <a4j:commandButton id="tab2" value="#{tabsBean.tabsMap['tab2']?'Enable':'Disable'} Tab 2" actionListener="#{tabsBean.disable}" reRender="tab2"> <a4j:actionparam name="value" value="#{!tabsBean.tabsMap['tab2']}" assignTo="#{tabsBean.value}" /> </a4j:commandButton> <a4j:commandButton id="tab3" value="#{tabsBean.tabsMap['tab3']?'Enable':'Disable'} Tab 3" actionListener="#{tabsBean.disable}" reRender="tab3"> <a4j:actionparam name="value" value="#{!tabsBean.tabsMap['tab3']}" assignTo="#{tabsBean.value}" /> </a4j:commandButton> </h:panelGrid> </h:form> <a4j:outputPanel ajaxRendered="true"> <rich:tabPanel switchType="ajax" width="200px" id="tabs"> <rich:tab label="Tab 1" disabled="#{tabsBean.tabsMap['tab1']}"> Tab 1 </rich:tab> <rich:tab label="Tab 2" disabled="#{tabsBean.tabsMap['tab2']}"> Tab 2 </rich:tab> <rich:tab label="Tab 3" disabled="#{tabsBean.tabsMap['tab3']}"> Tab 3 </rich:tab> </rich:tabPanel> </a4j:outputPanel>
TestBean.java class:
package test; import java.util.HashMap; import javax.annotation.PostConstruct; import javax.faces.event.ActionEvent; public class TabsBean { private HashMap <String, Boolean>tabsMap; private Boolean value; // setters and getters @PostConstruct public void create (){ tabsMap = new HashMap<String, Boolean> (); tabsMap.put("tab1", false); tabsMap.put("tab2", false); tabsMap.put("tab3", false); } public void disable (ActionEvent event) { String id = event.getComponent().getId(); tabsMap.put(id, value); } public TabsBean() {} }
Bean registration in JSF configuration file (manage bean in session scope in order to remember enabled/disabled tab state between requests):
<managed-bean> <managed-bean-name>tabsBean</managed-bean-name> <managed-bean-class>test.TabsBean</managed-bean-class> <managed-bean-scope>session</managed-bean-scope> </managed-bean>

