我希望保留一些技术/模式建议来保留我绑定到我的复合组件的每个单独的bean。
我基于用户操作以实际方式将复合组件添加到表单中,当用户完成时,我想收集他们添加的每个复合组件后面的单个bean。例如:如果用户选择&添加了4个复合组件,每个组件都有一个bean,因此当用户完成时,我希望4个bean具有用户输入的值。
这在JSF世界中似乎有些毛茸茸,但我继续深入研究stackoverflow和实验。我对JSF的细节比较陌生,但很开心。
我已经加载了复合组件,每个组件都被赋予一个bean用作“cc.attrs.bean”并且它正确地将控件添加到表单中。以下是我目前正在做的事情以及我的预期:
我的初步实验告诉我,如果我实例化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