JSF Ajax和自定义转换器

I have a problem with may AJAX on JSF page. He doesn't call the bean method. Converter works and returns a correct object, but bean method doesn't call. If I remove execute section method calls. If I remove coverter and send only Id method calls. Together they fail.

JSF page

<h:form id="jewelForm">
  <!-- ... -->
    <h:selectOneMenu id="material" value="#{jewelBean.material}" >
        <f:converter converterId="materialConverter"/>
        <f:selectItems value="#{jewelBean.materialList}" var="c"
                       itemLabel="#{c.name}" itemValue="#{c.id}"  />
    </h:selectOneMenu>

    <h:commandButton id="but1" value="#{titles.addThisMat}">
        <f:ajax id ="aj1"  
                listener="#{jewelBean.addMaterial}" 
                render="jewelForm:matTable"
                execute="material"/>
    </h:commandButton>

    <h:dataTable id ="matTable" 

    </h:dataTable>
    <h:commandButton value="#{titles.createThisJ}"  
                     action="#{jewelBean.saveJewel()}" />
</h:form>

bean

@ManagedBean(name = "jewelBean")
@SessionScoped
public class JewelBean implements Serializable {

private Material material;

public void addMaterial() {
    MaterialJewel mj = new MaterialJewel();
    mj.setMaterial(material);
    mj.setWeight(materialWeight);
    materialJewels.add(mj);
}

public Material getMaterial() {
    return material;
}

public void setMaterial(Material material) {
    this.material = material;
}

}

converter

@FacesConverter("materialConverter")
public class materialConverter implements Converter {

@Override
public Object getAsObject(FacesContext context, UIComponent component, String value) {

    try {
    //finding object with DAO
        return material;
        }
    } catch (NumberFormatException ex) {
      }  
}

@Override
public String getAsString(FacesContext context, UIComponent component, Object value) {
    return value.toString();

}
}

Thank for your comments.

remove listener on your f:ajax and add actionListener to your commandbutton. Does that help?

I have solved my problem. That was in selectOneMenu. The main problem was that itemValue in selectOneMenu must be the same type as value. So I have to rewrite my converter, getAsString method. Also method equals of entity must be like this.

fixed select on of JSF page

<h:selectOneMenu id="material" value="#{jewelBean.material}" >
      <f:converter converterId="materialConverter"/>
      <f:selectItems value="#{jewelBean.materialList}" var="c"
                     itemLabel="#{c.name}" itemValue="#{c}"  />
</h:selectOneMenu>

fixed convertor method

@Override
public String getAsString(FacesContext context, UIComponent component, Object value) {
    Material material = (Material) value;
    return (material.getId() != 0) ? String.valueOf(material.getId()) : null;
}