@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()
方法是执行搜索的应用程序逻辑所在的位置。     

要回复问题请先登录注册