I have encountered a strange situation. I have a xhtml looks like this:
<h:form id="frmContent">
 <p:dataTable id="tbl" ..>
</p:dataTable>
    <p:contextMenu for="tbl">
        <p:menuitem value="Delete" update="tbl"  actionListener="#{VehicleBean.deleteVehicle}"/>
        <p:menuitem value="Copy" update=":frmContent:vehicleDia:VehicleDialogContent" action="#{VehicleBean.copyVehicle}" oncomplete="PF('VehicleDialog').show();"/>
    </p:contextMenu>
     <p:dialog header="Vehicle Detail"  widgetVar="VehicleDialog" modal="true" resizable="true" appendTo="@(body)">
          <h:form id="vehicleDia">
            <p:panelGrid id="VehicleDialogContent" columns="2" >
               ...
            </p:panelGrid>
            <p:commandButton id="SaveButton" type="button" value="Save" update="VehicleDialogContent" actionListener="#{VehicleBean.saveVehicle}" oncomplete="PF('VehicleDialog').hide();">
        </h:form>
    </p:dialog>
The problem is, I cannot make the VehicleBean.saveVehicle() method fired. I have tried to remove the nested form "vehicleDia" but not work.
I have tried to changing actionListener to action but still not work.
I have tired using h:commandButton instead of p:commandButton still no lucky.
Right now, I dont have any clue.
PS: this is my bean:
@ManagedBean(name="VehicleBean")
@ViewScoped
public class VehicleBean {
    ...
    public void saveVehicle() {
    System.out.println("VehicleBean:saveVehcile is called");
    }
}
I am new to JSF and primefaces, any help is much appreciated!!