Java JSFbean属性未更新

Java JSFbean属性未更新,java,jsf,cdi,Java,Jsf,Cdi,我有一个bean,其中有一个名为“name”的字段,还有一个JSF表单,该表单的inputText映射了这个字段。字段的初始值在表单上显示良好 问题是当我提交表单时,该值没有用inputText的内容更新。在下面的savePlayer()方法中,name的值始终为“name”,而不是我在表单输入中键入的值 豆子: @Named @RequestScoped public class PlayerForm { @Inject private PlayerRepository pl

我有一个bean,其中有一个名为“name”的字段,还有一个JSF表单,该表单的inputText映射了这个字段。字段的初始值在表单上显示良好

问题是当我提交表单时,该值没有用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;
    }
}
表格:

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


非常感谢您的帮助

如果从包(JSF)而不是从(CDI)导入
@RequestScoped
,则可能发生这种情况。然后,每个EL表达式将创建一个全新的、完全独立的bean实例。给定的表单示例将在bean的两个实例中结束,一个在其中设置名称,另一个在其中调用操作


javax.faces.bean.RequestScoped
注释只能与JSF自己的注释结合使用,而不能与CDI的注释结合使用。

这正是我所做的^^^^非常感谢您的清晰解释:)不客气。顺便说一句,如果您将JSF中的
@ManagedBean
与CDI(或任何其他范围)中的
@RequestScoped
一起使用,症状是相同的。同样在这里,bean在默认的“none”范围内结束,每个EL表达式都有自己的实例。对于
@Named
bean,是否有类似
ViewScoped
的东西,或者只使用
@ManagedBean
更好?@BaileyS:jsf2.2具有与CDI兼容的
javax.faces.view.ViewScoped
。如果不能升级到JSF 2.2,请考虑使用JSF实用程序库OMNIFIFACS。自1.6版以来,它的特点是与JSF2.0/2.1目标CDI兼容
org.omnifaces.CDI.ViewScoped
@BalusC,我正在使用JSF2.2,并且已经更新了我所有的
ViewScoped
内容,以使用
view.ViewScoped
注释。这个问题和答案真的让我看到了从错误的软件包中使用示波器的隐患。