gpt4 book ai didi

java - JSF/Seam - 提交新组件实例?

转载 作者:行者123 更新时间:2023-11-30 05:13:28 25 4
gpt4 key购买 nike

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

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

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

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

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}")

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

最佳答案

我想到了解决方案,但我仍然不明白为什么需要它。通过添加<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 将我的表单提交视为“非面孔请求”。这是为什么?

关于java - JSF/Seam - 提交新组件实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2501831/

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