如何解决@ManagedProperty-将一个请求范围内的bean注入另一个请求范围内的bean
|| 我有这个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>
上面的“ 7”方法应返回一个值,该值是表单提交的结果。以上注射方法可以吗?
解决方法
我假设ѭ8将绑定到一个输入字段:
public class SearchBean implements Serializable {
private String input = null;
像这样:
<h:inputText value=\"#{searchBean.input}\" />
如果是这样,那么它将为空:
@PostConstruct
public void init()
{
System.out.println(\"Value: \" + searchBean.getInput());
}
但是,假设已设置一个值,则在调用此方法时该值不会为null:
public String Submit() {
return null;
}
理查德·高塔(Richard Hightower)针对非信徒的JSF的图像:JSF应用程序生命周期。
原因是由于JSF生命周期如何工作:
第一次解析#{searchBean...}
时,发现不存在:
实例化bean
执行任何依赖项注入(在这种情况下没有任何依赖项注入)
@PostConstruct方法被调用
Bean放入范围
假设“申请请求值”和“验证”阶段成功完成,则在“更新模型值”阶段中调用“ 14”。
在调用应用程序阶段调用“ 15”
此过程在JSF规范中定义。
现在,如果直接从参数图中注入SearchBean.input
,则在@PostConstruct
期间它不会为空:
@ManagedProperty(value = \"#{param.someParamName}\")
private String input;
但是,这没有任何真正的优势-您正在跳过任何输入验证,并且不能将ѭ8用作字段绑定,因为它将在“更新模型值”阶段中被覆盖。
SearchBean.Submit()
方法是执行搜索的应用程序逻辑所在的位置。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。