在ViewScoped

时间:2015-09-16 17:51:12

标签: jsf jsf-2 jsf-2.2 composite-component

我希望保留一些技术/模式建议来保留我绑定到我的复合组件的每个单独的bean。

我基于用户操作以实际方式将复合组件添加到表单中,当用户完成时,我想收集他们添加的每个复合组件后面的单个bean。例如:如果用户选择&添加了4个复合组件,每个组件都有一个bean,因此当用户完成时,我希望4个bean具有用户输入的值。

这在JSF世界中似乎有些毛茸茸,但我继续深入研究stackoverflow和实验。我对JSF的细节比较陌生,但很开心。

我已经加载了复合组件,每个组件都被赋予一个bean用作“cc.attrs.bean”并且它正确地将控件添加到表单中。以下是我目前正在做的事情以及我的预期:

  1. 加载复合组件
  2. 实例化其Bean
  3. 将Bean引用保存在ViewScoped bean的单独列表中(我以后挂钩到bean)
  4. 将Bean赋予复合组件(作为属性)
  5. 将复合组件添加到表单
  6. ...用户与表单和复合组件交互添加/编辑值...
  7. 用户终于推送“完成”(现在我需要修改后的bean)。
  8. 以为我可以从上面#3的“ViewScoped bean中的单独列表”中获取所有用户的值。
  9. 我的初步实验告诉我,如果我实例化bean,将bean引用保存在单独的ViewScoped列表中,然后将bean提供给Composite Component,我保存的bean将没有Composite Component的值。在所有构建/呈现阶段之间,它似乎丢失了我保存的bean与Composite Component绑定的bean之间的连接。

    我不知道我是否应该遵循这条路径,或者我是否应该使用FacesComponent事件技术来拦截传递的bean属性,或者我是否应该使用过滤器,或者甚至是神奇的小精灵尘埃等。 ..

    这看起来很有希望:我已将每个用户可选择的复合组件包装在一个通用的Wrapper Composite Component中(让我在它们周围放置一个漂亮的PrimeFaces可折叠面板框架)。例如,我将“Composite Component A”放入“Wrapper”,然后我将“Wrapper”添加到表单中。如果我将单个bean作为属性传递给这些复合组件,我希望Wrapper上的FacesComponent事件“init”技术可以很好地捕获ViewScoped bean中单独列表中的“真实绑定bean”。在我今天的尝试中,我无法找到正确的事件类型并获得对bean的访问......并且遇到了许多奇怪的错误(可能是由于我对生命周期缺乏详细了解)。

    Stack:Eclipse Mars,JSF 2.2,Mojarra 2.2,Tomcat 8.0

0 个答案:

没有答案