【发布时间】:2012-05-14 14:56:14
【问题描述】:
我在实施 CRUD 操作方面需要帮助。我的应用程序包含一个对象表。每个对象都由属性(值)列表描述。使用自定义 JSF 编辑器修改一个属性,具体取决于属性类型。
当用户添加新帐户时,编辑者列表由对象的类型确定,并使用custom:include 标记以表格形式显示。此自定义标记用于动态包含编辑器<custom:include src="#{editor.component}">。组件属性指向 JSF 编辑器的位置。
每个编辑器都有一个实现ValueHolder 接口并继承AbstractEditor 类的托管bean。 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 进行导航。
【问题讨论】:
-
@RequestScoped是您需要用于类似这样的事情,但如果您不喜欢多次调用 bean,您可以使用@SessionScope和“重置”它(手动!)在updateEditor()方法的末尾“模拟”初始化!
标签: java jsf primefaces crud managed-bean