问题标签 [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.
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 无法应用。
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:define
和h:form
,并将列缩短为两种不同的用法(属性显示和动作说明)
视图(缩短和截断):
支持豆:
这曾经可以工作,当我有 Backing Bean 时@SessionScoped
,但由于这需要 hackish 变通方法来产生直观(和预期)的行为,我决定将 Backing Bean 移动到更小的范围。因此,我选择了@ConversationScoped
,因为 BackingBean 需要比请求生命周期保持更长的时间......(此外,针对每个请求对数据库运行查询非常昂贵......)
关于CustomerEditController
and的简短说明CustomerDetailsController
。如果通过单击其中一个按钮提出请求,他们负责编辑和显示有关单个记录的更多信息。
非工作的东西是@PostConstruct public void fillCustomerList()
. 其他一切都按预期工作......
如果您需要任何进一步的信息,请询问,我会根据需要提供上下文;)
java - 无法使用复合键持久化和实体
我正在尝试保留一个具有复合主键的实体。这是我的 Employee 实体
这是我的评估课:
这是我的 EvaluationEvaluator 类,这是使用复合键的类。
这是 EvaluationEvaluatorsId 类:
这是我的方法保存
当我尝试坚持时,我得到以下异常。
这是堆栈跟踪:
jsf - Omnifaces Faces.redirect 失去对话范围
我对 org.omnifaces.util.Faces#redirect 和对话范围 bean 有疑问:
有一个按钮
在我的对话范围 bean 初始化之后,它必须在同一对话范围内导航到 createCar 页面:createHandler。
在 NavigationHandler#gotoCreateCar 中只是调用 Faces.redirect(createCarPage)。
如果我这样做,参数 cid 不会被传输,我会失去对话。
如果我在 faces-config.xml 中定义导航规则:
并在 NavigationHandler#gotoCreateCar 中返回所需的结果 - 然后它工作正常。
也许我不了解这两种导航方法之间差异的每一个细节。如果有人可以帮助我理解问题,我将不胜感激。
谢谢!
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 - 删除了不必要的代码。
删除了获取器和设置器...
}
jsf - ArrayList 为每个 Managedbean 调用 JSF 重置
场景: 我有 ap:fileupload multiple="true"和 ap:datatable 下面。当我上传文件时,文件名和文件大小应添加到 ArrayList 中,并应显示在数据表中。对于每个附加的文件,arrayList 应该附加一个新行。
问题: 当我上传第一个文件时,数据表显示文件详细信息。但是当我上传第二个文件时,仅显示第二个文件的详细信息,并且以前的文件详细信息被删除。似乎数组列表正在重置。具体来说,仅显示最后附加的文件详细信息。
我的代码如下:
文件上传.xhtml
豆
解决方案: 应该在视图范围内。但是有人能说出为什么它在覆盖范围内不起作用吗?
struts2 - Struts2 对话插件
有人成功使用过Struts 对话插件吗?
该文档说,@ConversationField
在 Action 类中使用注释注释的字段应该保留在整个对话中,这不会发生。
你能帮我使用 Struts 2 的任何其他插件来开发类似向导的应用程序吗?
以下是我的 struts.xml 结构
cdi - 如何防止 JSF 对话过期
我需要保持 JSF 2.2 CDI 对话不会过期。我尝试实现一种心跳机制,在该机制中,我使用 Ajax 单击一个“隐藏”按钮,该按钮又调用一个 servlet。但对话仍然到期。出于测试目的,我将超时设置为 10 秒,我的代码如下所示。
它每 5 秒打印一次“收到的心跳”文本。但对话仍然到期。
jsf - 为什么对话范围不存储变量值并抛出索引越界
所以,我有一个基本上可以组成一个团队的表格
现在它从列表中获取团队名称、描述、项目。然后我们应该单击一个按钮,该按钮打开一个对话框,该对话框具有一个带有多行选择选项的数据表和一个提交按钮,它将提交并将列表保存在一个变量中,然后可以单击模态框后面的表单,然后一次完整的数据。
在我的 addTeam 方法中,我基本上会System.out.println(selectedUsers[0].getId());
抛出 NULL 指针异常。
在我的check()
我基本上开始我的谈话使用conversation.begin()
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;