java - Seam 和 JSF - 误解 <h :inputHidden/>?

标签 java html jsf seam hidden-field

我使用 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/

相关文章:

javascript - React - 如何在选择下拉列表中获取父属性值

javascript - 如何让输入字段在提交后添加文本

jsf - commandButton/commandLink/ajax action/listener 方法未调用或输入值未设置/更新

java - ENUM 和单选按钮 Java

java - 可以在运行时操作静态属性吗?

javascript - 按值|文本查找选择索引

css - 在 PrimeFaces 中调整布局单元大小时处理调整大小事件

java - Richfaces 4.0 中的属性集离题了吗?

java - 如何使用hibernate在mysql中对 double 类型变量使用like子句

java - 使用 java ForkJoinPool 调用 JdbcTemplate batchUpdate()