问题标签 [conversation-scope]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1142 浏览

java - JSF - t:saveState x @ConversationScope

关于在不使用会话的情况下临时保存 JSF 应用程序的状态:

另一种方法是使用 Apache Tomahawk 库的 t:saveState;另一种较新的选择是使用 CDI @ConversationScope。

t:saveState x @ConversationScope 各自
的优缺点是什么?你会使用哪一个,为什么?
关于内存消耗(会话消耗的空间和时间),@ConversationScope 是否更好?

无状态 JSF xt:saveState
在 JSF 2.2 上会有无状态运行的可能性。由于不再保留组件树,因此 t:saveState 将不起作用。这是对的吗?!

我有一个从 JSF 1.2 迁移到 JSF 2.x 的应用程序。它有很多使用 t:saveStave 的视图。
当前会话大小变得太大。这主要是会话复制的问题。

是否值得将 t:saveState 替换为 @ConversationScope?


更新:大多数用例都是流程(如向导)。因此,@ViewScope 无法应用。

0 投票
1 回答
55 浏览

java - 加载的记录未显示在视图中

所以为了让它相对简单:我有一些 Primefaces-Page,它应该以表结构表示数据库记录。

我将这些记录保存List<Customer>在一个@ConversationScoped支持 bean 中。我已通过调试验证,列表已正确填充数据库中的记录(hibernate db FWIW)。这是在“businessInterface”Distributor 类的帮助下完成的,它实际上只是(数据库)服务类的解耦掩码。

如前所述,我已经验证了数据库以及分发器正确地返回了预期值。不幸的是,在视图中没有记录,而是emptyMessage显示。

该应用程序在 jBoss 7.1.1-Final 应用服务器上运行。

为了更好的可读性,我排除了提供的代码周围的h:head, h:body, ui:composition,ui:defineh:form,并将列缩短为两种不同的用法(属性显示和动作说明)

视图(缩短和截断):

支持豆:

曾经可以工作,当我有 Backing Bean 时@SessionScoped,但由于这需要 hackish 变通方法来产生直观(和预期)的行为,我决定将 Backing Bean 移动到更小的范围。因此,我选择了@ConversationScoped,因为 BackingBean 需要比请求生命周期保持更长的时间......(此外,针对每个请求对数据库运行查询非常昂贵......)

关于CustomerEditControllerand的简短说明CustomerDetailsController。如果通过单击其中一个按钮提出请求,他们负责编辑和显示有关单个记录的更多信息。

非工作的东西是@PostConstruct public void fillCustomerList(). 其他一切都按预期工作......

如果您需要任何进一步的信息,请询问,我会根据需要提供上下文;)

0 投票
0 回答
238 浏览

java - 无法使用复合键持久化和实体

我正在尝试保留一个具有复合主键的实体。这是我的 Employee 实体

这是我的评估课:

这是我的 EvaluationEvaluator 类,这是使用复合键的类。

这是 EvaluationEvaluatorsId 类:

这是我的方法保存

当我尝试坚持时,我得到以下异常。

这是堆栈跟踪:

0 投票
1 回答
999 浏览

jsf - Omnifaces Faces.redirect 失去对话范围

我对 org.omnifaces.util.Faces#redirect 和对话范围 bean 有疑问:

有一个按钮

在我的对话范围 bean 初始化之后,它必须在同一对话范围内导航到 createCar 页面:createHandler。

在 NavigationHandler#gotoCreateCar 中只是调用 Faces.redirect(createCarPage)。

如果我这样做,参数 cid 不会被传输,我会失去对话。

如果我在 faces-config.xml 中定义导航规则:

并在 NavigationHandler#gotoCreateCar 中返回所需的结果 - 然后它工作正常。

也许我不了解这两种导航方法之间差异的每一个细节。如果有人可以帮助我理解问题,我将不胜感激。

谢谢!

0 投票
1 回答
134 浏览

jsf - @ConversationScoped 破坏了表单中的过滤和排序选项,@ViewScoped 工作正常

我正在做一个小课程通过项目,我有一个问题。

manager.xhtml 是一个 JSF 页面,它用于查看数据库中的数据,对它们进行排序、过滤、删除条目和编辑这些条目。当我在 Manager.java 中使用 @ViewScoped 时 - 除了编辑部分之外的所有内容都可以正常工作。“编辑”链接将用户发送到另一个页面 - edit.xhtml。在我使用@ConversationScoped 能够读取从edit.xhtml 中的manager.xhml 发送的数据之后。使用@ConversationScoped 后,条目编辑选项完美运行,但它开始在某些过滤/排序选项中出错 - 按类别排序开始提取错误,如“名称为空”,按价格过滤 - 相同。

这是代码。

管理器.xhtml

这是使用@ConversationScoped 时开始出现问题的形式

编辑.xhtml

版本表格 - 仅在使用 @ConversationScoped 时填充所选条目的数据:

获取 manager.xhtml 发送的 ID

在表单中,数据是从经理那里获取的,如下所示:

按钮保存更改:

Manager.java - 删除了不必要的代码。

删除了获取器和设置器...

}

0 投票
1 回答
369 浏览

jsf - ArrayList 为每个 Managedbean 调用 JSF 重置

场景: 我有 ap:fileupload multiple="true"和 ap:datatable 下面。当我上传文件时,文件名和文件大小应添加到 ArrayList 中,并应显示在数据表中。对于每个附加的文件,arrayList 应该附加一个新行。

问题: 当我上传第一个文件时,数据表显示文件详细信息。但是当我上传第二个文件时,仅显示第二个文件的详细信息,并且以前的文件详细信息被删除。似乎数组列表正在重置。具体来说,仅显示最后附加的文件详细信息。

我的代码如下:

文件上传.xhtml

解决方案: 应该在视图范围内。但是有人能说出为什么它在覆盖范围内不起作用吗?

0 投票
0 回答
416 浏览

struts2 - Struts2 对话插件

有人成功使用过Struts 对话插件吗?

该文档说,@ConversationField在 Action 类中使用注释注释的字段应该保留在整个对话中,这不会发生。

你能帮我使用 Struts 2 的任何其他插件来开发类似向导的应用程序吗?

以下是我的 struts.xml 结构

0 投票
4 回答
1485 浏览

cdi - 如何防止 JSF 对话过期

我需要保持 JSF 2.2 CDI 对话不会过期。我尝试实现一种心跳机制,在该机制中,我使用 Ajax 单击一个“隐藏”按钮,该按钮又调用一个 servlet。但对话仍然到期。出于测试目的,我将超时设置为 10 秒,我的代码如下所示。

它每 5 秒打印一次“收到的心跳”文本。但对话仍然到期。

0 投票
1 回答
78 浏览

jsf - 为什么对话范围不存储变量值并抛出索引越界

所以,我有一个基本上可以组成一个团队的表格

现在它从列表中获取团队名称、描述、项目。然后我们应该单击一个按钮,该按钮打开一个对话框,该对话框具有一个带有多行选择选项的数据表和一个提交按钮,它将提交并将列表保存在一个变量中,然后可以单击模态框后面的表单,然后一次完整的数据。

在我的 addTeam 方法中,我基本上会System.out.println(selectedUsers[0].getId());抛出 NULL 指针异常。

在我的check()我基本上开始我的谈话使用conversation.begin()

0 投票
0 回答
788 浏览

java - CDI ConversationScope:以一个请求结束和开始?

我正在使用 JSF (Mojarra 2.2.6) 和 Primefaces 5.13 构建一个 Java EE 7 webapp,在 Glassfish 4.1 网络服务器上运行。

现在我遇到了 conversationScoped bean (CDI) 的问题。

我想做的是:使用 primefaces autoCompleteText 选择客户并显示他/她的详细信息。此外,我想停止旧对话(以便彻底重置所有 bean)并立即开始新的对话。

只要我先使用 ap:commandButton 结束旧对话,然后通过 autocompleteText 中的 p:ajax itemSelect 事件开始新对话,它就可以正常工作。

但它不起作用,当我结束旧对话并通过一个 itemSelect 事件开始新对话时。在这种情况下,我得到 NonExistantConversationException:

这里是 XHTML 代码:

这是支持bean的(相关)代码:

所以,问题是:在用户从 primefaces autoCompleteText 中选择客户的那一刻,通常是否有可能停止一个 cdi 对话并立即开始一个新的对话?

非常感谢您的帮助!

编辑:新对话由目标页面上的此 preRenderView 事件启动:

...在我的支持 bean 中使用此方法:

唯一需要做的就是删除 autoCompleteText 的第一个 itemSelect 事件并使用 rc() 在 onclick-client-side callbackhandler 中调用 p:remoteCommand;