HtmlAjaxCommandButton em DataTable não chama o metodo do Bean [RESOLVIDO!]

Ola pessoal, estou com um problema a dias, estou criando um datatable dinamico e preciso adiciona um botão de editar que chame um evento do meu bean, mas não estou conseguindo nem por reza.

segue o meu codigo:

// ------------------------------------BEAN QUE CRIAM AS TABS DINAMICAS ------------------------------//

public class DynamicTabMB implements Serializable {

	private static final long serialVersionUID = -4266707643267102654L;

	private HtmlTabPanel dynamicTabPanel = null;
	private HtmlTab tabItem = null;

	public DynamicTabMB (){
	}
	
	public HtmlTabPanel getDynamicTabPanel() throws Exception {
		createTabPanel();
		return dynamicTabPanel;
	}

	public void setDynamicTabPanel(HtmlTabPanel dynamicTabPanel) {
		this.dynamicTabPanel = dynamicTabPanel;
	}

	public HtmlTab getTabItem() {
		return tabItem;
	}

	public void setTabItem(HtmlTab tabItem) {
		this.tabItem = tabItem;
	}

	public void createTabPanel() throws Exception {
		DynamicTabFacade facade = new DynamicTabFacade();
		
		try{
		ArrayList<DynamicTab> tabs = facade.getTabConfig();
		
		dynamicTabPanel = new HtmlTabPanel();
		dynamicTabPanel.setId("dynamicTabPanel");
		dynamicTabPanel.setRendered(true);
		
		for(int i = 0 ; i < tabs.size() ; i++){
			tabItem = new HtmlTab();
			tabItem.setId(tabs.get(i).getId().trim());
			tabItem.setName(tabs.get(i).getName());
			tabItem.setLabel(tabs.get(i).getLabel());
			tabItem.setSwitchType(tabs.get(i).getSwitchtype());
			
			if(tabs.get(i).getId().trim().equals("TAB1")){
				DynamicDataTable dt = new DynamicDataTable();
				tabItem.getChildren().add(dt.getDynamicDataTableGroup());
			}
					
			
			dynamicTabPanel.getChildren().add(tabItem);
		}
		}
		catch (Exception e) {
			throw e;
		}

	}
}


// --------------- BEAN QUE CRIA O DATATABLE E O EVENTO ----------------------------//

package br.com.sigga.mb;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import javax.el.MethodExpression;
import javax.el.ValueExpression;
import javax.faces.application.Application;
import javax.faces.component.html.HtmlOutputText;
import javax.faces.component.html.HtmlPanelGroup;
import javax.faces.context.FacesContext;

import org.ajax4jsf.component.html.HtmlAjaxCommandButton;
import org.richfaces.component.html.HtmlColumn;
import org.richfaces.component.html.HtmlDataTable;


public class DynamicDataTable {
	// Init
	// --------------------------------------------------------------------------------------

	private static List<List<String>> dynamicList; // Simulate fake DB.
	private static String[] dynamicHeaders; // Optional.
	private HtmlPanelGroup dynamicDataTableGroup; // Placeholder.
	HtmlDataTable dynamicDataTable;

	// Actions
	// -----------------------------------------------------------------------------------

	private void loadDynamicList() {

		// Set headers (optional).
		dynamicHeaders = new String[] { "ID", "Name", "Value" };

		// Set rows. This is a stub example, just do your dynamic thing.
		dynamicList = new ArrayList<List<String>>();
		dynamicList.add(Arrays
				.asList(new String[] { "ID1", "Name1", "Value1" }));
		dynamicList.add(Arrays
				.asList(new String[] { "ID2", "Name2", "Value2" }));
		dynamicList.add(Arrays
				.asList(new String[] { "ID3", "Name3", "Value3" }));
		dynamicList.add(Arrays
				.asList(new String[] { "ID4", "Name4", "Value4" }));
		dynamicList.add(Arrays
				.asList(new String[] { "ID5", "Name5", "Value5" }));
	}

	private void populateDynamicDataTable() {

		// Create <h:dataTable value="#{myBean.dynamicList}" var="dynamicItem">.
		dynamicDataTable = new HtmlDataTable();
		dynamicDataTable.setId("dataTable");

		dynamicDataTable.setValueExpression("value", createValueExpression(
				"#{dynamicDataTable.dynamicList}", List.class));
		dynamicDataTable.setVar("dynamicItem");

		// Iterate over columns.
		for (int i = 0; i < dynamicList.get(0).size(); i++) {

			// Create <h:column>.
			HtmlColumn column = new HtmlColumn();

			// Create <h:outputText value="dynamicHeaders[i]"> for <f:facet
			// name="header"> of column.
			HtmlOutputText header = new HtmlOutputText();
			header.setValue(dynamicHeaders[i]);
			column.setHeader(header);

			// Create <h:outputText value="#{dynamicItem[" + i + "]}"> for the
			// body of column.
			HtmlOutputText output = new HtmlOutputText();
			output.setValueExpression("value", createValueExpression(
					"#{dynamicItem[" + i + "]}", String.class));
			column.getChildren().add(output);			

			dynamicDataTable.getChildren().add(column);
		}
		HtmlColumn column = new HtmlColumn();
		HtmlAjaxCommandButton commandButton = new HtmlAjaxCommandButton();
		String value = "CLICK";
		commandButton.setValue(value);
		commandButton.setActionExpression(createMethodExpression("#{dynamicDataTable.test}"));		
		column.getChildren().add(commandButton);
		
		
		dynamicDataTable.getChildren().add(column);
		
		// Add the datatable to <h:panelGroup
		// binding="#{myBean.dynamicDataTableGroup}">.
		dynamicDataTableGroup = new HtmlPanelGroup();
		// getA4J();
		dynamicDataTableGroup.getChildren().add(dynamicDataTable);
	}

	// Getters
	// -----------------------------------------------------------------------------------

	public HtmlPanelGroup getDynamicDataTableGroup() {
		// This will be called once in the first RESTORE VIEW phase.
		if (dynamicDataTableGroup == null) {
			loadDynamicList(); // Preload dynamic list.
			populateDynamicDataTable(); // Populate editable datatable.
		}

		return dynamicDataTableGroup;
	}


	public List<List<String>> getDynamicList() {
		return dynamicList;
	}

	// Setters
	// -----------------------------------------------------------------------------------

	public void setDynamicDataTableGroup(HtmlPanelGroup dynamicDataTableGroup) {
		this.dynamicDataTableGroup = dynamicDataTableGroup;
	}

	private ValueExpression createValueExpression(String valueExpression,
			Class<?> valueType) {
		FacesContext facesContext = FacesContext.getCurrentInstance();
		return facesContext.getApplication().getExpressionFactory()
				.createValueExpression(facesContext.getELContext(),
						valueExpression, valueType);
	}

	public MethodExpression createMethodExpression(String methodBean){
		FacesContext ctx = FacesContext.getCurrentInstance();
		 Application app = ctx.getApplication();
		 Class[] params = {};
		 MethodExpression actionExpression =
		 app.getExpressionFactory().createMethodExpression(ctx.getELContext(),
				 methodBean, String.class, params);
		 
		 return actionExpression;
		
	}
	
	public void test(){
		
		System.out.print("ENTRO NO TESTE");
	}
}

MEU JSP


<%@taglib uri="https://ajax4jsf.dev.java.net/ajax" prefix="ajax"%><%@taglib
	uri="http://richfaces.org/a4j" prefix="a4j"%><%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>
<%@ taglib prefix="f"  uri="http://java.sun.com/jsf/core"%>
<%@ taglib prefix="h"  uri="http://java.sun.com/jsf/html"%>
<%@ taglib uri="http://richfaces.ajax4jsf.org/rich" prefix="rich"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<script type="text/javascript" src="../js/global.js"></script>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Dynamic Test</title>
</head>
<body>
<f:view>
<rich:tabPanel width="300" id="panelFiltro" rendered="true" binding="#{dynamicTabMB.dynamicTabPanel}"/>
</f:view>
</body>
</html>
// --------------------------------    FACES CONFIG ----------------------------------//

<managed-bean>
		<managed-bean-name>dynamicDataTable</managed-bean-name>
		<managed-bean-class>br.com.sigga.mb.DynamicDataTable</managed-bean-class>
		<managed-bean-scope>application</managed-bean-scope>
	</managed-bean>

Por favor qual meu erro?

Faltava adicionar o ajax button dentro de um form,

de qualquer forma fica a solução para as pessoas Obrigado.

HtmlColumn column = new HtmlColumn();
HtmlForm form = new HtmlForm();
HtmlAjaxCommandButton commandButton = new HtmlAjaxCommandButton();
String value = “CLICK”;
commandButton.setValue(value);
commandButton.setActionExpression(createMethodExpression("#{dynamicDataTable.test}"));

	form.getChildren().add(commandButton);
	column.getChildren().add(form);