I have a simple Form in my JSF page that looks as follows:
<html 
  xmlns="http://www.w3.org/1999/xhtml"
  xmlns:h="http://xmlns.jcp.org/jsf/html"
  xmlns:f="http://java.sun.com/jsf/core"
>
  <f:view>
    <h:head>
      <f:metadata>
        <f:viewParam name="cities" value="#{myBean.cities}" />
      </f:metadata>
    </h:head>
    <h:body>
      <h:form>
        <h:messages id="messages" />
        <h:selectManyCheckbox value="#{myBean.cities}" label="Select City" >
          <f:selectItems value="#{myBean.allCities}" />
        </p:selectManyCheckbox>
        <h:commandButton value="Submit">
          <f:ajax execute="@form" render="output"/>
        </h:commandButton>
      </h:form>
      <h:panelGroup id="output">
        Number of Selected Cities: #{myBean.cities.size()}
      </h:panelGroup>
    </h:body>
  </f:view>
</html>
The matching backing bean:
With following bean methods:
@Named
@RequestScoped
public class MyBean {
  private List<String> cities = new ArrayList<>();
  public List<String> getCities() {
    return cities;
  }
  public void setCities(List<String> cities) {
    this.cities = cities;
  }
  public List<String> getAllCities() {
    return new ArrayList<>(Arrays.asList(new String [] {
      "Los Angeles",
      "St. Louis",
      "San Francisco",
      "Dallas",
      }));
  }
}
Observations:
- I have added logging to the entry and exit of the 
getCitiesandsetCitiesmethods. During refresh of the JSF page, thegetCitiesmethod gets called. However, when submitting, thesetCitiesnever gets called. - I do not get any errors or exceptions in the console log (javax.faces.PROJECT_STAGE set to DEVELOPMENT in web.xml).
 - No errors are being passed to 
<h:messages/> - set methods do not get called for any form input fields. The page behaves 'odd'.
 
The issue seems similar to Issue #3 on the accepted answer from commandButton/commandLink/ajax action/listener method not invoked or input value not set/updated, however I do not have an apparent conversion problem for <p:selectCheckboxMenu>. As per documentation it should be able to handle a List<String> perfectly.
So in addition to fixing the obvious problem, how can we make sure any errors related to this are made visible, rather than having this silent type of failure?