gpt4 book ai didi

java - Seam 和 JSF - 误解 ?

转载 作者:行者123 更新时间:2023-12-01 15:39:46 25 4
gpt4 key购买 nike

我使用 Seam 2.2、JPA 和 JSF 编写了一个电子商务 Web 应用程序,当然,它包含产品搜索功能。为了实现这一点,我创建了一个名为 SearchForm 的类。其中包含用于搜索的各种参数(起始索引、最大结果数、“和”术语、“或”术语等)我还有一个网络操作 - 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 />用于向前和向后翻页结果的链接。由于我没有为每个搜索创建对话,因此我尝试将状态传递给 ProductSearchActionSearchForm通过使用 <h:inputHidden /> 的对象隐藏字段。我的页面中有这样的字段:

<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 Scope的问题吗?我非常感谢您能提供的任何帮助。

最佳答案

根据您的评论,听起来您正确使用了 h:inputHidden,并且问题必须出在 JSF bean 范围内。

bean 的行为就像它们在请求范围内一样。当您触发 h:commandLink 时,页面会重新呈现并将隐藏的输入发回,然后在导航结果(“下一个”或“上一个”)转发到另一个页面后,这些发布的值将不可用。

很可能 @Scope(ScopeType.CONVERSATION) 的行为与您期望的不同。我不是 Seam 专家,但从快速浏览文档来看,除非另有说明,Seam 将每个单独的 HTTP 请求视为一个“ session ”。这样就可以解释为什么当您单击命令链接时这些值会重置。您可能需要使用 @Begin/@End 注释来划分长时间运行的对话

http://seamframework.org/Community/ConversationExample

关于java - Seam 和 JSF - 误解 <h :inputHidden/>?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8251559/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com