簡體   English   中英

Seam&JSF-誤解 <h:inputHidden /> ?

[英]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 />隱藏字段將狀態傳遞給ProductSearchActionSearchForm對象。 我的頁面中有這樣的字段:

<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注釋划定長時間的對話

http://seamframework.org/Community/ConversationExample

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM