我需要帮助来实施 CRUD 操作。我的应用程序包含一个对象表。每个对象都由属性(值)列表描述。一个属性使用自定义 JSF 编辑器进行修改,具体取决于属性类型。
当用户添加新帐户时,编辑者列表由对象类型确定,并使用custom:include
标签显示在表单中。此自定义标记用于动态包含编辑器<custom:include src="#{editor.component}">
。组件属性指向 JSF 编辑器的位置。
每个编辑器都有一个托管 bean,它实现了一个ValueHolder
接口并继承了一个AbstractEditor
类。AbstractEditor 包含一个updateEditor方法。
public interface ValueHolder {
String EDITOR_VALUES = "editorValues";
public Object getValue();
}
我使用会话映射,编辑器名称作为键,编辑器值作为值。当用户修改属性时,会调用 updateEditor 方法并使用编辑器的新值更新地图。
问题在于编辑器背后的 bean 的范围。如果我使用 @SessionScoped bean,则不会再次调用初始化编辑器的代码,并且我无法处理添加/编辑操作。@SessionScoped 仅适用于添加。我尝试过使用@RequestScoped,但是经常调用这些bean,我不知道这是否真的很好。
我正在使用 JSF2、PrimeFaces 3.0.M4 和 Spring Web Flow 进行导航。