问题标签 [session-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.
jsf - 如何在 PhaseListener 中检索会话范围的托管 bean?
我在设置授权侦听器(实现 PhaseListener)来管理身份验证和自动化时遇到了麻烦。
更具体地说,我设置了一个名为 SessionBean 的会话范围 bean:
在我的 sun-web.xml 中:
在 login() 中,我对用户名/密码进行控制,如果成功,我设置“loggedUser”。
我的 AuthorizationListener 是:
在 sun-web.xml 中:
但我收到一个空指针 sessionBean.getLoggedUser()。因此,当 AuthorizationListener 检查用户时,仍然没有创建 SessionBean。这就是为什么我添加了一个“如果 SessionBean 不存在,则创建它并将其放入 SessionMap”,但仍然无法正常工作的原因。
我没有被迫使用这种方法进行身份验证和授权,但我需要的是避免“session.setAttribute(“username”,username)。所以任何其他策略都会非常感激。谢谢,Andrea
编辑:正如 BalusC 所建议的,我编辑了 afterPhase 方法。始终为空的 SessionBean 仍然存在问题。
jsf - JSF 与 CDI SessionScope 对 Statelss EJB 事务有奇怪的影响。谁能解释一下?
我有一个带有注入的无状态会话 Bean (UserInfoService) 的 SessionScoped 托管 bean (UserInfoController)。
UserInfoController 调用 UserInfoService 来更新 UserInfo 记录。UserInfoService 加载相应的 UserInfo 记录,对其进行修改,最后调用 em.flush();
当托管 bean UserInfoController 使用 CDI 注释 (javax.enterprise.context.SessionScoped) 进行注释时,除非无状态 bean 的实体管理器使用 PersistenceContextType.EXTENDED 注释,否则不会更新用户记录。
当托管 bean 使用 JSF 注释 (javax.faces.bean.SessionScoped) 进行注释时,使用 PersistenceContextType.TRANSACTION 时记录更新成功。
谁能解释这种行为?不管调用者是 JSF 还是 CDI SessionScoped 托管 bean,事务边界不应该限制在 Stateless Bean 上吗?(TransactionAttributeType 未定义:它应该默认为 REQUIRED)
任何信息,将不胜感激!谢谢!本
ajax - JSF PrimeFaces / Ajax 渲染到 Datable 无法将项目添加到列表中
我正在尝试使用“panelGrid”中的表单来呈现dataTable
using中的值<f:ajax>
。但是,使用 提交时,<h:commandButton>
发送的值不会显示在dataTable
. 我没有在浏览器中收到堆栈或任何控制台错误。
这是我的 xhtml(简体):
产品目录:
这是 bean(简体):
ajax - JSF:只能使用带有 ajax 命令的 sessionscoped 视图link
场景:我想通过使用 commandLink 使用 AJAX 在 JSF 中部分执行和呈现表单的一部分。由于这将通过 AJAX 完成,据我了解,ViewScoped 应该在 AJAX 请求之间保存页面中组件的值。
我在下面创建了一个示例,其中我有一个输入框,其中输入了订单名称,按下 commandLink(标记为“输入订单”),来自 inputText 的订单名称被添加到名为“订单”的 ArrayList 中,并且“订单”显示在 CommandLink 下方的数据表中。
来自 CommandLink 的 AJAX 请求执行将字符串值添加到“orderName”变量的 inputBox。AJAX 请求向 processDataTable() 方法发送一个 ActionEvent,该方法获取“orderName”值并将其添加到“orders”列表中。然后“orderName”为空。然后,AJAX 请求呈现带有为空的“orderName”的 inputText 组件,以及显示所有先前输入的订单的 DataTable,包括来自该请求的新添加的“orderName”。
问题:如果我使用的是 SessionScoped bean,则代码有效,但如果我使用 ViewScoped bean,则代码无效。我在代码中添加了 System.out.println() 以查看发生了什么。如果我使 bean SessionScoped,那么一切都按计划进行。inputText 值是通过 set 方法设置的,processOrder() 方法将“orderName”String 添加到“orders”List 中,重新渲染DataTable 以显示这个添加的名称。...
对于 ViewScoped bean,“orderName”值设置为 InputText 组件的值,但在 ProcessOrder() 方法内部为“null”,将“null”添加到“orders”列表,DataTable 没有除空外显示。
如果我在添加“orderName”之前使用 orders.add("Some Name") 在 processOrder() 中手动添加 orderName,则“orders”将保留 {"Some Order", "null"} 并更改 Orders仍然没有使用 AJAX 重新渲染。
所有都适用于 SessionScoped bean 而不是 ViewScoped bean?我还尝试了使用 CommandLink 而不是 ActionListener 的 Action 属性,同样的故事.. 适用于 SessionScoped 但不适用于 ViewScoped。
我在这里只能想到两件事,1)我错过了 AJAX 和 CommandLink 如何协同工作的关键点,以及 ViewScoped 应该如何工作(很有可能);或 2) 出于某种原因,我如何使用 CommandLink 提交 AJAX 调用,每次单击它都会刷新页面,从而删除“订单”列表的先前值。但是,这仍然不能解释为什么如果我手动将订单输入到列表中,它仍然不会在 AJAX 请求中使用 ViewScoped bean 呈现,而是会使用 SessionScoped bean。
请帮忙!!??
这是我的代码:
这是我的 jsf 页面:
java - 会话范围 bean - 如何处理多用户数据
好吧,我已经使用 JSF 2.0 创建了一个 Web 应用程序。我在任何地方都使用过会话范围 bean,因此我遇到了问题。:( 我将用下面的例子来解释。
我在 dataTable 中有用户列表。当我单击用户时,我会看到该用户的详细信息。现在,当我右键单击用户 A 并单击Open in new tab
时,我会在新选项卡中看到用户 A 的详细信息。
现在,当我右键单击用户 B 并单击在新选项卡中打开时,我会看到用户 B 的详细信息。
但是,当我进入选项卡(那里有用户 A 的详细信息)并刷新该页面时,我会看到用户 B 的详细信息。
如何克服这个问题,如果我刷新页面,我仍然会看到用户 A 而不是用户 B 的详细信息。
java - Java:用于更新不共享相同引用的所有相等对象(在相同上下文中)的模式
在我的 java 应用程序中,我在不同的地方多次使用相同的对象。这意味着当比较这些对象时,equals 方法返回 true。现在我想更新一个对象并对所有相等的对象进行更改。你知道是否有这样的模式吗?
我的具体用例是:我正在使用 JSF、JPA 和 CDI。用户在允许他编辑分离实体 EntityA 的网页上。该页面是会话范围的。EntityA 有两个对 EntityB 的引用(也是分离的)。这些对象可以相同。不是同一个引用,但它们可能是相等的。
JSF 视图允许用户从选择列表中选择 entity1 和 entity2。它还显示了这些 EntityB 的一些详细信息,并且允许用户单独编辑 entity1 和 entity2。一切正常,除了用户为 entity1 和 entity2 选择了相同(相等)的 EntityB。然后,仅更新对这些对象的引用。当然 entity1 和 entity2 是两个不同的 JPA 实体,并且不是同一个引用。但我想将更改分发到 EntityB 的所有分离实例。我的应用程序中有数百次这种情况,所以我不想关心,在哪些情况下必须更新哪些对象。我需要一些自动为我做的解决方案。一个想法是将我在此会话中使用的所有对象保留在特殊列表中,并且每次提交和处理请求时都会遍历此映射并更改所有相等的对象。但是他的声音很脏。也许有一个内置的 JPA 函数可以使所有相等的对象具有相同的引用。我不知道这是否可能。您对此有解决方案吗?谢谢。
java - Java EE 触发事件会创建一个新实例
我有两个 ManagedBeans。
关于我的问题,他们执行以下操作:
第一的:
第二:
这发生在网站被调用时: 1. 消费者被实例化。2. 消费者触发事件。3. Provider 被实例化。4. 调用provide()。5. 实例化一个新的消费者 6. 调用 consume()。
如您所见,我不得不使用布尔“处理”来防止应用程序无限循环。
为什么容器不使用实例化的 SessionScoped ManagedBean?我认为 SessionScoped ManagedBeans 就像 Session 的 Singleton?我想我可以通过以下方式解决这个问题: A:对更改的属性使用静态变量。B:手动实现观察者模式。
但是这里必须有一个更简单的方法!?
jsf - 当我将 @SessionScoped 更改为 @ViewScoped 时,我总是遇到 JDOM 异常
我想将一个jsf页面@SessionScoped的范围更改为@ViewScoped,但我总是遇到这个异常,我不明白为什么。我检查了构建路径和依赖项似乎都很好。堆栈错误:
有人可以告诉我如何避免/解决这个问题?
jsf - 在 Web 过滤器中访问会话范围的 JSF 托管 bean
我有一个名为 userSession 的 SessionScoped bean 来跟踪用户(用户名、ifLogged 等)。我想过滤一些页面,因此我需要从我创建的 webFilter 访问 bean。我怎么做?我看起来甚至不可能将 bean 导入潜在地可见。
jsf - 重新部署服务器后的 ViewScoped
我在 JSF 2.0 中的简单表单上有一个奇怪的问题。在这种形式中,我使用了两个选择,如果选择了第一个选择,则第二个应该重新加载新选项。我使用与 Primefaces 演示页面相同的机制:Primefaces 演示页面。我的 bean 是@ViewScoped。我还通过“mvn jetty:run”在 jetty-maven 插件上运行我的应用程序。到目前为止没有问题。我的表格效果很好。
当我在服务器运行时更改某些内容时会出现问题,码头正在重新加载。之后,这两个选择不起作用 - 如果我选择第一个选项,第二个没有响应。我必须通过在 Spring Security 中注销来清除所有会话,然后我的表单才能恢复工作。
当我将 bean 更改为@SessionScoped时,问题消失了。这工作正常吗?我不想让我的表单在会话范围内,我更喜欢 ViewScoped。