下面是2個工作示例,它們具有相同的用途:檢索應用程序全局的FAQ結果。我們根據輸入值獲取結果並更新數據表。查看綁定&ApplicationScoped bean與RequestScoped bean
第一個使用RequestScoped和bean bindng。
第二個使用ApplicationScoped bean和視圖綁定。
實施例1:
XHTML
<h:inputText id="faqSearch" value="#{faqBean.filter}"/>
<h:commandButton value="submit" ajax="true" update="faqResults"/>
<h:dataTable
id="faqResults"
value="#{faqBean.retrieveResults()}"
var="result">
<h:column>${result}</h:column>
</h:dataTable>
豆
@RequestScoped
@ManagedBean
public class FaqBean {
String filter;
public String getFilter(){
return filter;
}
public void setFilter(String filter){
this.filter = filter;
}
public List<String> retrieveResults(){
//compute result from a backend service based on filter
return doSomething(filter);
}
實施例2:
XHTML
<h:inputText id="faqSearch" binding="#{filter}"/>
<h:commandButton value="submit" ajax="true" update="faqResults"/>
<h:dataTable
id="faqResults"
value="#{faqBean.retrieveResults(filter.value)}"
var="result">
<h:column>${result}</h:column>
</h:dataTable>
豆
@ApplicationScoped
@ManagedBean
public class FaqBean {
public List<String> retriveResults(String filter){
//Compute result from a backend service based on filter
return doSomething(filter);
}
所以1似乎是很好的方式去與JSF。
但是2對我來說似乎是更好的解決方案,因爲它不會在每次執行時創建/銷燬一個bean,bean對應用程序來說是靜態的。
但是有了這種思維方式,我們可以擺脫所有的requestcope bean,所以它感覺不對。也許這個解決方案比第一個更糟糕,我不知道這是如何管理的。
那麼最好的方法是什麼?
我不知道我很困惑,或者你是。 GetResultsName()可能是錯誤的命名。它根本不是一個getter,它是一個函數操作邏輯並返回不同的結果。 – Ghetolay