代码之家  ›  专栏  ›  技术社区  ›  purecharger

jsf/seam-提交时的新组件实例?

  •  1
  • purecharger  · 技术社区  · 15 年前

    我对jsf的困惑还在继续。这是一个 question asked yesterday ,但我觉得这需要一个新问题。我有一个seam组件,它期望为检索 List<String> 从一种方法。这在第一次导航到页面时非常有效。这个 List 用于显示许多不同的 selectOneRadio 填充 <h:form/> .

    现在在提交时,我无法获取要注入的url参数或在组件上设置的url参数!添加 <h:inputHidden/> 导致面部感觉被抛出。

    然后我试着设置 作为对象上的一个实例变量,当随后对submit进行调用时(我也不明白为什么这样做),我检查该变量是否为非空:如果不是,则返回它。

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

    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。

    2 回复  |  直到 15 年前
        1
  •  2
  •   purecharger    15 年前

    我想出了解决办法,但我还是不明白为什么要这样做。通过添加 <S:conversationId/> <h:commandButton/> 标记我现在得到的会话id在表单submit中传播。

    但是,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请求”。为什么会这样?

        2
  •  0
  •   jsight TaherT    15 年前

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