【发布时间】:2011-04-13 11:17:59
【问题描述】:
我有这个 SearchBean:
@ManagedBean(name = "searchBean")
@RequestScoped
public class SearchBean implements Serializable
{
private String input = null;
// getter methods
public String getInput() {
return input;
}
// setter method
public void setInput(String input) {
this.input = input;
}
public String Submit() {
return null;
}
}
我可以使用@ManagedProperty 将它注入到另一个bean 中吗?例如:
@ManagedBean(name = "bookBean")
@RequestScoped
public class BookBean implements Serializable
{
@ManagedProperty(value = "#{searchBean}")
private SearchBean searchBean;
@PostConstruct
public void init()
{
System.out.println("Value: " + searchBean.getInput());
}
public SearchBean getSearchBean() {
return searchBean;
}
public void setSearchBean(SearchBean searchBean) {
this.searchBean = searchBean;
}
}
还有 Facelet (search.xhtml):
<h:form id="formSearch">
<h:commandButton value="Search" action="#{searchBean.Submit}" />
</h:form>
更新:我通过ui:insert 组件将search.xhtml 插入到book.xhtml 中,如下所示:
<h:form id="formBooks">
<ui:insert name="search">
<ui:include src="/templates/common/search.xhtml"/>
</ui:insert>
</h:form>
上面的searchBean.getInput() 方法应该返回一个值作为表单提交的结果。上面的注入方法可以吗?
【问题讨论】:
-
@user:我删除了我的答案,因为如果托管属性注入有效(这显然是“是”),那只会回答你的 initial 问题,但 McDowell 做得更好回答您的真正问题的工作(在调用
@PostConstruct时属性为空。 -
@BalusC:当您的答案在刷新后消失时,我认为我的浏览器有问题。是的,对此感到抱歉。我仍在尝试通过实际示例来了解规格,但有时我会卡住,不知道如何前进。不过,感谢您的回答。
标签: jsf jsf-2 code-injection