¿Por qué la entrada (por ejemplo h: inputText) anidada en h: dataTable no actualiza el modelo Bean? [duplicar

Esta pregunta ya tiene una respuesta aquí:

Utilizando <h: dataTable> <h: inputText> en una Lista <String> no actualiza los valores del modelo 1 respuesta

Tengo página jsf:

....
<form jsfc="h:form" action="">
  <h:dataTable value="#{newMusician.strings}" var="preferredMusicGenre" id="musicGenresSelectTable">
    <h:column>
      <h:inputText value="#{preferredMusicGenre}" immediate="true"/>
     </h:column>
   </h:dataTable>
   <p>
      <input type="submit" jsfc="h:commandButton" value="Add" action="#{newMusician.saveNewMusician}"/>
   </p>
</form>
....

Y bean gestionado que tiene ArrayList of Strings:

@ManagedBean
@ViewScoped
public class NewMusician {

    private ArrayList<String> strings = new ArrayList<String>();

    public NewMusician() {
        strings.add("olo");
    }
    public ArrayList<String> getStrings() {
        return strings;
    }
    public void saveNewMusician() {
    .....
    }
....
}

Problema: cuando cambio el texto y presiono el botón Guardar, en el método saveNewMusician () puedo ver que las "cadenas" de ArrayList contienen el mismo valor anterior "olo", pero no el que inserté en el campo de entrada. El mismo problema si usa h: selecOneMenu.

La situación cambia si no se usa una cadena, sino un objeto que agrega una cadena y establece el valor en una cadena. Entonces, si usaré algo de POJO y cambiaré inputText a:

<h:inputText value="#{preferredMusicGenrePojo.string}" immediate="true"/>

Todo se vuelve correcto.

Pregunta: ¿Por qué el uso de getter de 1 nivel<h:inputText value="#{preferredMusicGenre}"/> es incorrecto, pero el uso de getter de 2 niveles:<h:inputText value="#{preferredMusicGenrePojo.text}"/> está bien?

Respuestas a la pregunta(1)

Su respuesta a la pregunta