java - 具有动态属性的对象的添加/编辑操作

标签 java jsf primefaces crud managed-bean

我需要帮助来实现 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/

相关文章:

java - 高并发应用?

java - SessionMap 不保存 JSF 对象

ios - 使用 WildFly 迁移到 JDK 10 和 JSF 2.3 后,iOS 和 Mac OSX 上的站点渲染中断

eclipse - eclipse中动态web项目打不开欢迎页

jsf - 在 msg 中使用变量属性

java - 通过omnifaces ViewScoped多次调用PreDestroy方法

Java Web 应用程序需要同时支持 Web 和移动设备

java - Spring 国际化可以通过 xml 配置进行,但不能通过 Java 配置进行

java - ArrayList类.add错误

java - Tomcat 作为代理服务器