我已經使用Seam 2.2,JPA和JSF編寫了電子商務Web應用程序,當然,它包含產品搜索功能。爲了實現這個目標,我創建了一個名爲SearchForm
的類,其中包含用於搜索的各種參數(開始索引,結果的最大數量,'和'術語''或'術語等等)我也有一個web動作 - ProductSearchAction
- 使用SearchForm
對象從數據庫中提取條目。它看起來是這樣的:Seam&JSF - 誤解<h:inputHidden />?
@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 />
的工作原理嗎?我需要做些什麼才能將這些值傳遞給我的搜索操作?有沒有更好的方法來實現我的目標?這是一個Seam範圍問題嗎?我真的很感謝你能給予的任何幫助。
這聽起來像你的JSF和h的理解:inputHidden是正確的。要排除故障,請嘗試使用相同的值將h:outputText添加到頁面。另外,請嘗試h:outputText value =「#{searchForm}」來查看searchForm是否暴露在JSF視圖中 - 也許Seam/JSF佈線中存在錯誤。 – wrschneider
當我執行查看源代碼時,我肯定會看到正在寫入的隱藏輸入值,所以我知道它們至少在HTML本身內。然而,當我點擊「下一個」或「前一個」帶我到searchProducts()的鏈接時,我在searchForm對象中看不到這些值。 – Shadowman
請顯示您的導航配置/邏輯 - 「next」如何導致searchProducts() – Tair