JSF Bean属性未更新

kga*_*ron 5 java jsf cdi

我有一个名为'name'的字段的bean,以及一个使用此字段映射的inputText的JSF表单.字段的初始值很好地显示在表单上.

问题是当我提交表单时,值不会随inputText的内容更新.在下面的savePlayer()方法中,name的值始终是'name',而不是我在表单输入中输入的值.

豆子:

@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;
    }
}
Run Code Online (Sandbox Code Playgroud)

表格 :

   <h:form>
        <h:inputText value="#{playerForm.name}" />
        <h:commandButton value="Submit" action="#{playerForm.savePlayer}" />
    </h:form>
Run Code Online (Sandbox Code Playgroud)

非常感谢您的帮助!

Bal*_*usC 9

如果@RequestScoped从包javax.faces.bean(JSF)而不是从javax.enterprise.context(CDI)导入,则会发生这种情况.#{}然后,每个EL表达式都会创建一个全新且完全独立的bean实例.给定的表单示例最终将在bean的两个实例中结束,一个是设置名称的实例,另一个是调用操作的实例.

javax.faces.bean.RequestScoped注解只能与JSF自己一起使用@ManagedBean标注不CDI的@Named注解.