在这个例子中,为什么需要@ManagedBean注释?在setPalyBean()方法中,它接收一个参数并将其设置为私有变量" playerBean"。这就像非JSF世界中的常规Java类设计。如果删除了@ManagedBean,它会不会一样?
@Named
@SessionScoped
public class PlayersBean {
private String playerName;
private String playerSurname;
public PlayersBean() {
playerName = "Rafael";
playerSurname = "Nadal";
}
//getters and setters
}
@ManagedBean
@ViewScoped
public class ProfileBean {
@ManagedProperty("#{playersBean}")
private PlayersBean playersBean;
private String greetings;
public ProfileBean() {
}
public void setPlayersBean(PlayersBean playersBean) {
this.playersBean = playersBean;
}
}
答案 0 :(得分:0)
这些是规则:
@ManagedBean
- 如果您:
proileBean
的bean。如果您想通过其他名称来说明该bean,例如profile
,则需要使用此注释 @ManagedProperty
和相关的setter。他们是规则。它归结为注射如何发生 - 反射。
没有注释会有效吗?不 - 没有那个注释(并且取决于你的JSF版本; 2.2允许所有类型的东西),容器不知道你的bean并且不会被提示采取行动
您可以省去麻烦并采用CDI惯例:
将@ManagedBean
替换为@Named
(仅当您需要访问页面中的bean时才需要此注释,否则,这是不必要的 - CDI上下文中的每个bean都是自动管理的)
将@ManagedProperty
替换为@Inject
。使用此注释,您可以完全抛弃setter和getter。您也不必担心要注入或注入的bean的范围。
将当前@ViewScoped
替换为javax.faces.view.ViewScoped