code: public void assignIds(final InputContainerElements elements, final FacesContext context) {
          boolean refreshIds = false;
          if (getId().startsWith(UIViewRoot.UNIQUE_ID_PREFIX)) {
              setId(elements.getPropertyName(context));
              refreshIds = true;
          }
          UIComponent label = elements.getLabel();
          if (label != null) {
              if (label.getId().startsWith(UIViewRoot.UNIQUE_ID_PREFIX)) {
                  label.setId(getDefaultLabelId());
              } else if (refreshIds) {
                  label.setId(label.getId());
              }
          }
          for (int i = 0, len = elements.getInputs().size(); i < len; i++) {
              UIComponent input = (UIComponent) elements.getInputs().get(i);
              if (input.getId().startsWith(UIViewRoot.UNIQUE_ID_PREFIX)) {
                  input.setId(getDefaultInputId() + (i == 0 ? "" : (i + 1)));
              } else if (refreshIds) {
                  input.setId(input.getId());
              }
          }
          for (int i = 0, len = elements.getMessages().size(); i < len; i++) {
              UIComponent msg = elements.getMessages().get(i);
              if (msg.getId().startsWith(UIViewRoot.UNIQUE_ID_PREFIX)) {
                  msg.setId(getDefaultMessageId() + (i == 0 ? "" : (i + 1)));
              } else if (refreshIds) {
                  msg.setId(msg.getId());
              }
          }
      }
docs: assigning ids seems to break form submissions, but I don't know why