我有一个名为'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;
}
}
表格:
<h:form>
<h:inputText value="#{playerForm.name}" />
<h:commandButton value="Submit" action="#{playerForm.savePlayer}" />
</h:form>
非常感谢您的帮助!
答案 0 :(得分:9)
如果您从包javax.faces.bean
(JSF)而不是从javax.enterprise.context
(CDI)导入@RequestScoped
,则会发生这种情况。然后,每个EL表达式#{}
将创建一个全新且完全独立的bean实例。给定的表单示例最终会在bean的两个实例中结束,一个是设置名称的实例,另一个是调用操作的实例。
javax.faces.bean.RequestScoped
注释只能与JSF自己的@ManagedBean
注释一起使用,而不能与CDI的@Named
注释一起使用。