【问题标题】:JSF/Seam - new component instance on submit?JSF/Seam - 提交时的新组件实例?
【发布时间】:2010-03-23 16:45:36
【问题描述】:

我对 JSF 的困惑仍在继续。这是question asked yesterday 的延续,但我觉得它值得提出一个新问题。我有一个单一的接缝组件,它期望注入一个 URL 参数以从方法中检索 List<String>。这在第一次导航到页面时非常有效。 List 用于显示填充<h:form/> 的许多不同的selectOneRadio 组。

现在在提交时,我无法获取要在组件上注入或以其他方式设置的 URL 参数!添加<h:inputHidden/> 会导致FacesExceptions 被抛出。

然后我尝试将List 设置为对象上的实例变量,然后在提交上进行后续调用时(我也不明白为什么这样做)我检查变量是否为非-null:如果不是,则返回它。

现在我发现在提交时创建了一个新的组件实例!!!

getList() called
this.toString(): .BeanAction@5fd98420

#### This is when submit is clicked
getList() called
this.toString(): .BeanAction@22aacbce

组件有以下注解:

Stateful
@Scope(ScopeType.CONVERSATION)
@Name("bean")
@Restrict("#{identity.loggedIn}")

有人可以解释为什么要创建组件的新实例吗? 我真的不太确定如何处理这个问题。我认为 hidden 参数会起作用,因为这就是我使用直接 HTML 的方式,我有点惊讶它不适用于 JSF/Seam。

【问题讨论】:

    标签: java jsf seam


    【解决方案1】:

    我找到了解决方案,但我仍然不明白为什么需要它。通过将<S:conversationId/> 添加到<h:commandButton/> 标记,我现在可以在表单提交中传播conversationId。

    但是,接缝文档指出:

    If you don't do anything special, a non-faces request  (a GET request for example)
    will not propagate the conversation context and will be processed in a new 
    temporary conversation.
    

    这意味着 Seam/JSF 将我的表单提交视为“非面孔请求”。这是为什么呢?

    【讨论】:

      【解决方案2】:

      当您进入页面时(或提交后),您是否在 url 中看到会话 ID?我担心Seam Conversation 可能没有正确初始化。

      【讨论】:

      • 方法getList()标记为@Begin,我可以多次刷新显示我的表单的页面,并且使用相同的backing bean。当我点击提交时,我被重定向到我的summary.xhtml 页面,并且有一个新的cid URL 参数。如何在提交过程中保持对话..?
      • 我试过这个 我当我点击提交时仍然会得到一个新的对话 ID
      猜你喜欢
      • 1970-01-01
      • 2010-09-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多