[英]Seam & JSF - misunderstanding <h:inputHidden />?
我已經使用Seam 2.2,JPA和JSF編寫了一個電子商務Web應用程序,其中當然包含產品搜索功能。 為此,我創建了一個名為SearchForm
的類,該類包含用於搜索的各種參數(起始索引,最大結果數,“和”項,“或”項等)。我還進行了Web操作ProductSearchAction
使用SearchForm
對象從數據庫中提取條目。 看起來像這樣:
@Name("searchForm")
@AutoCreate
@Scope(ScopeType.CONVERSATION)
public class SearchForm {
private int startIndex = 0;
private int maxResults = 20;
...
}
@Name("productSearchAction")
@AutoCreate
@Scope(ScopeType.CONVERSATION)
public class ProductSearchAction {
@In
private SearchForm searchForm = null;
@Out
private List<Products> products = null;
...
public void searchProducts() {
...
}
...
}
在我的JSF中,我顯示了<h:form />
包含的產品列表,帶有2個<h:commandLink />
鏈接,用於向前和向后翻頁結果。 由於我沒有為每個搜索創建對話,因此我試圖通過使用<h:inputHidden />
隱藏字段將狀態傳遞給ProductSearchAction
和SearchForm
對象。 我的頁面中有這樣的字段:
<h:form>
...
<h:inputHidden value="#{searchForm.maxResults}" />
<h:inputHidden value="#{searchForm.startIndex}" />
<h:inputHidden value="#{searchForm.andTerms}" />
...
<h:commandLink action="next" value="Next" />
<h:commandLink action="previous" value="Previous" />
</h:form>
我對<h:inputHidden />
理解是,它將在SearchForm
填充適當的值,然后將其提供給ProductSearchAction.searchProducts()
。 當我查看HTML源代碼時,我看到在HTML中設置了隱藏參數。 但是,當我單擊“下一個”或“上一個”使我進入searchProducts()
操作時,未設置任何值。
我是否誤解了<h:inputHidden />
工作方式? 我需要怎么做才能將這些值傳遞給搜索操作? 有沒有更好的方法可以實現我的目標? 是接縫范圍問題嗎? 非常感謝您能提供的任何幫助。
根據您的評論,聽起來您使用的是h:inputHidden正確,並且問題必須出在JSF bean范圍內。
Bean的行為就好像它們是請求范圍一樣。 當您觸發ah:commandLink時,頁面將重新渲染並將隱藏的輸入發布回去,然后在導航結果(“下一個”或“上一個”)轉發到另一個頁面后,這些發布的值將不可用。
@Scope(ScopeType.CONVERSATION)很有可能沒有您期望的那樣。 我不是Seam專家,但是從文檔的快速掃描來看,除非另有說明,否則Seam似乎將每個單獨的HTTP請求都視為“對話”。 這樣就可以解釋為什么單擊CommandLink時會重置值。 您可能需要使用@ Begin / @ End注釋划定長時間的對話 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.