我需要帮助来实现 CRUD 操作。我的应用程序包含一个对象表。每个对象都由属性(值)列表来描述。根据属性类型,使用自定义 JSF 编辑器修改一个属性。
当用户添加新帐户时,编辑者列表根据对象的类型确定,并使用custom:include
以表单形式显示。标签。此自定义标签用于动态包含编辑器 <custom:include src="#{editor.component}">
。组件属性指向 JSF 编辑器的位置。
每个编辑器都有一个实现 ValueHolder
的托管 bean接口(interface)并继承 AbstractEditor
类(class)。 AbstractEditor 包含一个 updateEditor 方法。
public interface ValueHolder {
String EDITOR_VALUES = "editorValues";
public Object getValue();
}
我使用 session 映射,以编辑器名称作为键,以编辑器值作为值。当用户修改属性时,将调用 updateEditor 方法,并使用编辑器的新值更新 map 。
问题在于编辑器背后的 bean 范围。如果我使用@SessionScoped beans,初始化编辑器的代码不会再次调用,我无法处理添加/编辑操作。 @SessionScoped 仅适用于添加。我尝试过使用 @RequestScoped,但是 Bean 被频繁调用,我不知道这是否真的很好。
我使用 JSF2、PrimeFaces 3.0.M4 和 Spring Web Flow 进行导航。
最佳答案
您是否考虑过使用@ViewScoped
bean?只要您继续返回同一页面, View 作用域 bean 就会保留在作用域内。这看起来像你正在做的事情。
或者,如果您使用 CDI,则可以使用 @ConversationScoped
在执行更新时将 Bean 保持在范围内。这有一个明确的开始和结束。这将使您能够确定 Bean 何时超出范围。
关于java - 具有动态属性的对象的添加/编辑操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10585807/