【发布时间】:2011-11-24 02:25:48
【问题描述】:
我使用 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>
我对@987654331@ 的理解是,它将在SearchForm 中填充适当的值,然后将其提供给ProductSearchAction.searchProducts()。当我查看 HTML 源代码时,我看到了在 HTML 中设置的隐藏参数。但是,当我单击“下一个”或“上一个”时,我将转到 searchProducts() 操作,没有设置任何值。
我是否误解了<h:inputHidden /> 的工作原理?我需要做什么才能将这些值传递给我的搜索操作?有没有更好的方法来实现我的目标?这是Seam Scope问题吗?非常感谢您提供的任何帮助。
【问题讨论】:
-
听起来你对JSF和h:inputHidden的理解是对的。要进行故障排除,请尝试使用相同的值将 h:outputText 添加到您的页面。还可以尝试 h:outputText value="#{searchForm}" 以查看 searchForm 是否完全暴露在您的 JSF 视图中 - 也许 Seam/JSF 接线中有问题。
-
我在查看源代码时肯定会看到隐藏的输入值正在写入,所以我知道它们至少在 HTML 本身中就位。但是,当我单击将我带到 searchProducts() 的“下一个”或“上一个”链接时,我在 searchForm 对象中看不到这些值。
-
请显示您的导航配置/逻辑——“下一步”如何导致 searchProducts()
-
一般来说,
将呈现先前请求中存在的值,并在回发时将该值放回同一个 bean 中。 @Scope(CONVERSATION) 为您提供了跨重定向保留 bean 值的额外优势。顺便说一句, JSF 的行为与 非常相似,因此在开发/调试期间使用 ,并在一切正常后将它们转换为 。祝你好运!
标签: java html jsf seam hidden-field