Propiedad JSF Bean no actualizada [duplicado]

Tengo un bean con un campo llamado 'nombre' y un formulario JSF que tiene un inputText mapeado con este campo. El valor inicial del campo se muestra bien en el formulario.

El problema es que cuando envío el formulario, el valor no se actualiza con el contenido del inputText. En el método savePlayer () a continuación, el valor del nombre es siempre 'nombre', no lo que escribí dentro de la entrada del formulario.

El frijol :

@Named
@RequestScoped
public class PlayerForm {

    @Inject
    private PlayerRepository playerRepository;

    private String name = "name";


    public String savePlayer(){
        Player player = new Player();
        player.setName(name);
        playerRepository.savePlayer(player);
        return "saveUserOk";
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }
}

La forma :

   <h:form>
        <h:inputText value="#{playerForm.name}" />
        <h:commandButton value="Submit" action="#{playerForm.savePlayer}" />
    </h:form>

¡Muchas gracias por la ayuda!

preguntado el 27 de agosto de 11 a las 22:08

1 Respuestas

Esto puede suceder si importó @RequestScoped del paquete javax.faces.bean (JSF) en lugar de desde javax.enterprise.context (CDI). Cada expresión EL #{} luego crearía una instancia completamente nueva y completamente separada del bean. El ejemplo de formulario dado terminaría en dos instancias del bean, una donde se establece el nombre y otra donde se invoca la acción.

La javax.faces.bean.RequestScoped La anotación solo se puede usar junto con la propia JSF. @ManagedBean anotación no con CDI @Named anotación.

Respondido 28 ago 11, 02:08

Eso es exactamente lo que hice ^^ Muchas gracias por estas claras explicaciones :) - kgautron

Eres bienvenido. Por cierto, los síntomas son los mismos si usó @ManagedBean de JSF con @RequestScoped de CDI (o cualquier otro alcance). También aquí, el bean termina en el alcance predeterminado "ninguno" y cada expresión EL #{} obtiene su propia instancia. - BalusC

BalusC, rápidamente se está convirtiendo en mi mejor amigo en Internet para la programación JSF. Hay algo como ViewScoped para @Named frijoles, o es mejor usar @ManagedBean ¿en lugar de? - trognanders

@BaileyS: JSF 2.2 tiene un CDI compatible javax.faces.view.ViewScoped. Si aún no puede actualizar a JSF 2.2, considere usar la biblioteca de utilidades JSF OmniFaces. Desde la versión 1.6, presenta una compatibilidad con CDI dirigida a JSF 2.0 / 2.1 org.omnifaces.cdi.ViewScoped. showcase.omnifaces.org/cdi/ViewScoped - BalusC

@BalusC, estoy usando JSF 2.2 y he actualizado todos mis ViewScoped cosas para usar el view.ViewScoped anotación. Esta pregunta y respuesta realmente me abrieron los ojos a los peligros ocultos de usar osciloscopios del paquete equivocado. - trognanders

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.