Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为具有动态特性的对象添加/编辑操作_Java_Jsf_Primefaces_Crud_Managed Bean - Fatal编程技术网

Java 为具有动态特性的对象添加/编辑操作

Java 为具有动态特性的对象添加/编辑操作,java,jsf,primefaces,crud,managed-bean,Java,Jsf,Primefaces,Crud,Managed Bean,我需要帮助执行CRUD操作。我的应用程序包含一个对象表。每个对象由属性(值)列表描述。根据属性类型,使用自定义JSF编辑器修改一个属性 当用户添加新帐户时,编辑器列表根据对象的类型确定,并使用custom:include标记以表格形式显示。此自定义标记用于动态包含编辑器。component属性指向JSF编辑器的位置 每个编辑器都有一个托管bean,它实现一个ValueHolder接口并继承一个AbstractEditor类。AbstractEditor包含一个updateEditor方法 我使用

我需要帮助执行CRUD操作。我的应用程序包含一个对象表。每个对象由属性(值)列表描述。根据属性类型,使用自定义JSF编辑器修改一个属性

当用户添加新帐户时,编辑器列表根据对象的类型确定,并使用
custom:include
标记以表格形式显示。此自定义标记用于动态包含编辑器
。component属性指向JSF编辑器的位置

每个编辑器都有一个托管bean,它实现一个
ValueHolder
接口并继承一个
AbstractEditor
类。AbstractEditor包含一个updateEditor方法

我使用一个会话映射,编辑器名称作为键,编辑器值作为值。当用户修改属性时,将调用updateEditor方法,并使用编辑器的新值更新映射

问题在于编辑器背后bean的范围。如果我使用@SessionScoped beans,初始化编辑器的代码不会再次调用,我无法处理添加/编辑操作。@SessionScoped仅用于添加。我尝试过@RequestScoped,但是bean经常被调用,我不知道这是否真的很好


我正在使用JSF2、PrimeFaces 3.0.M4和SpringWebFlow进行导航。

您看过如何使用
@ViewScoped
bean吗?只要您继续返回到同一页面,视图范围的bean就会保持在范围内。这看起来像你正在做的


或者,如果您使用的是CDI,则可以在执行更新时使用
@ConversationScoped
将bean保持在范围内。这有一个明确的开始和结束。这将允许您确定bean何时超出范围。

我已保存了
@SessionScoped
bean。bean的名称存储在会话中,并且与编辑器的文件名同名。这样,编辑器和bean之间就有了关联


已将初始化方法添加到
ValueHolder
界面。添加/修改对象时会调用此方法。

@RequestScoped
是这样做所需的,但是如果您不喜欢多次调用bean,您可以使用
@SessionScope
并在
updateEditor()
方法末尾“手动”重置它以“模拟”初始化!视图包含带有对象的表。当我添加/编辑一个对象时,该表上会出现一个模式窗口。我不能使用@ViewScoped bean,因为该视图不会更改。只有当我导航到另一个视图时,它才会更改。我如何在上下文中使用@ConversationScoped?当用户编辑对象时,
@ConversationScoped
bean将启动对话,当用户将对象保存为示例时,对话将结束。
public interface ValueHolder {  
    String EDITOR_VALUES = "editorValues";  
    public Object getValue();  
}