Java JSF/Seam-提交时新组件实例?
我对JSF的困惑还在继续。这是a的延续,但我觉得有必要提出一个新问题。我有一个seam组件,它期望注入一个URL参数,以便从方法中检索Java JSF/Seam-提交时新组件实例?,java,jsf,seam,Java,Jsf,Seam,我对JSF的困惑还在继续。这是a的延续,但我觉得有必要提出一个新问题。我有一个seam组件,它期望注入一个URL参数,以便从方法中检索列表。这在第一次导航到页面时非常有效。列表用于显示填充的许多不同的selectOneRadio组 现在在提交时,我无法获得要注入的URL参数或在组件上设置的URL参数!添加会导致抛出Facesceceptions 然后我尝试将列表设置为对象上的一个实例变量,当在submit上进行后续调用时(我也不理解为什么这样做),我检查变量是否非null:如果不是,则返回它 现
列表。这在第一次导航到页面时非常有效。列表
用于显示填充
的许多不同的selectOneRadio
组
现在在提交时,我无法获得要注入的URL参数或在组件上设置的URL参数!添加
会导致抛出Facesceceptions
然后我尝试将列表
设置为对象上的一个实例变量,当在submit上进行后续调用时(我也不理解为什么这样做),我检查变量是否非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}")
有人能解释为什么创建了组件的新实例吗?
我真的不太确定该如何处理这件事。我认为隐藏参数会起作用,因为这就是我使用纯HTML的方式,我有点惊讶它不适用于JSF/Seam。当您进入页面(或提交后),您是否在url中看到对话id?我担心Seam对话可能没有正确初始化。我想到了解决方案,但我仍然不明白为什么需要它。通过将
添加到
标记中,我现在可以在表单submit中传播会话ID
但是,seam文档说明:
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将我的表单提交视为“非faces请求”。为什么会这样?方法getList()
标记为@Begin
,我可以多次刷新显示表单的页面,并使用相同的支持bean。当我点击提交时,我被重定向到我的summary.xhtml
页面,并且有一个新的cid
URL参数。如何在提交过程中维护对话?我尝试了此操作,但在单击提交时仍会获得一个新的对话id