问题标签 [codi]
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.
primefaces - p:graphicImage 正在 Myface CODI 中打开一个新的 WindowId
我看到我的表单中的 primeface p:graphicImage 导致在同一个浏览器选项卡中创建一个新的 windowId 。
我所有的 bean 都是窗口范围的。Myface CODI 的@WindowScoped。
由于我的业务逻辑与初始登录相关联,因此环境变量与 windowContext 相关联。
当 p:graphicImage 尝试使用新的 windowId/windowContext 访问 bean 时,应用程序将失败。
有没有办法避免这种情况?
这是我的视图文件
这是我的豆子的一部分
下面是我看到的输出。
前两个“in Get Data”与对 getData 的 preRenderView 调用(此处代码中未显示)和 PostContruct 调用有关。
第三个显然是在 p:graphicImage 尝试使用新的 windowId 访问 photoStream 时创建新的 bean 实例时对 @PostConstruct 的调用。
我已通过从表单中删除 p:graphicImage 来尝试此操作,在这种情况下,永远不会进行第三次调用。
我必须使用 p:graphicImage 因为我需要从数据库中传输数据。而且我试图避免编写单独的 servlet 来流式传输图像。
此外,单独的 servlet 不是一个好的选择,因为我需要知道登录的员工才能显示图像。
请让我知道是否有任何好的解决方案来克服这个问题。
我的完整环境是 Tomcat 7 Openwebbeans Myfaces CODI Myfaces + Primefaces
eclipse - Myface CODI 不会在 Eclipse 中抛出异常
我在 Eclipse IDE 中使用 Myfaces、Primefaces、Tomcat 进行 JSF 开发。通过测试时,我曾经在 Eclipse 控制台中得到 Myfaces/Primefaces 抛出的异常。
最近,我通过添加 MyFaces CODI 和 OpenWebBeans 来增强我的开发环境。自从我这样做后,我就不再在我的 Eclipse 控制台中收到任何错误消息。我不知道为什么。
甚至不会抛出 nullpointerexception、找不到方法/变量等基本错误。我已将 Myface CODI 阶段设置为开发。我收到与对话开始和停止相关的 MyFace CODI 消息,但从未抛出所有异常和错误。
调试 myfaces/primefaces/bean 代码来发现这些简单的错误是令人沮丧的。
有人可以建议我该怎么做才能在 Eclipse 环境中再次获取异常。需要一些紧急帮助,因为这个问题已经大大减慢了开发速度。
java - CDI - CODI - ViewAccessScoped on 产生 = 错误
在一个jsf页面中,我从这样的烘焙豆中获取数据
我有一个 java.lang.StackOverflowError,
我的支持 bean 看起来像这样,我希望有一个生产者来缓存数据,然后可能会覆盖它......
我只想在 ViewAccessScope 期间维护列表
顺便说一句,如果将我的 Producer 更改为 SessionScope 我没有问题
servlet 异常是:
循环的堆栈错误如下所示:
jsf - 如何修复“目标无法访问,标识符 'bean' 解析为 null”?
我正在使用 JSF 2.1.7 和 Primefaces 3.2、CDI 和 Apache MyFaces CODI 来访问 @ViewScoped。
一切工作正常,但是当我通过 ui:param 将 bean 传递到另一个页面,然后尝试通过 ap:ajax 请求专门使用该 bean 时,我收到消息,“目标无法访问,标识符 'bean' 解析为无效的”
然后在 page.xhtml 我尝试这样做。
对 bean.simpleModel 的第一次调用正确解析。对 bean.onMarkerDrag 的 ajax 调用没有。
我对formBean 的声明是@Named("formBean"), @ViewScoped。
有任何想法吗?
ajax - 带有 CODI 的 @Advanced 的 FacesConverter 中的 CDI @Inject 是否可以处理 AJAX 请求?
我们使用FacesConverter
s 并用CODI
'注释对它们进行@Advanced
注释,以便能够使用CDI
注入。这适用于正常请求。但是在AJAX
请求时,注入的CDI
bean 为空。和中的FacesContext
参数
是org.apache.myfaces.context.servlet.FacesContextImpl
代替org.apache.myfaces.extensions.cdi.jsf2.impl.listener.request.CodiFacesContextWrapper
像正常请求一样。
有谁知道如何使注入在FacesConverter
s 中与AJAX
请求一起工作?谢谢。
jsf-2 - ViewMapListener JSF 未被调用
我正在尝试将 JSF@ViewScoped
注释移植到 CDI。原因是更多的教育而不是基于需要。我选择这个特定的范围主要是因为缺少一个可能希望在 CDI 中实现的自定义范围的更好的具体示例。
也就是说,我的出发点是将JSF 注释移植@ViewScoped
到 CDI 。但是,这个实现并没有考虑到API中提到的Context的一个看似非常重要的责任(即销毁) :
上下文对象负责通过调用 Contextual 的操作来创建和销毁上下文实例。特别是,上下文对象负责通过将实例传递给 Contextual.destroy(Object, CreationalContext) 来销毁它创建的任何上下文实例。get() 不得随后返回已销毁的实例。上下文对象必须将相同的 CreationalContext 实例传递给 Contextual.destroy(),就像它在创建实例时传递给 Contextual.create() 一样。
我决定通过拥有我的Context
对象来添加此功能:
- 跟踪
Contextual
它为哪个 s 创建了哪些对象UIViewRoot
; - 实现ViewMapListener
UIViewRoot
接口并通过调用将自己注册为每个监听器UIViewRoot.subscribeToViewEvent(PreDestroyViewMapEvent.class, this)
; - 在调用 时销毁任何已创建
Contextual
的 sViewMapListener.processEvent(SystemEvent event)
并从中注销自身UIViewRoot
。
这是我的Context
实现:
这是Disposable
界面:
这是范围注释:
这是 CDI 扩展声明:
我在javax.enterprise.inject.spi.Extension
contains 下添加了文件,以便在 CDIMETA-INF/services
中com.example.CustomContextsExtension
正确注册上述内容。
我现在可以制作像这样的 bean(注意自定义@ViewScoped
实现的使用。):
The beans are created properly and properly injected into JSF pages (i.e. the same instance is returned per view, new ones are created only when the view is created, the same instances are injected over multiple requests to the same view). How do I know? Imagine the above code littered with debugging code which I purposefully stripped out for clarity and since this is already a huge post.
The problem is that my ViewContext.isListenerForSource(Object source)
and ViewContext.processEvent(SystemEvent event)
are never called. I was expecting that at least upon session expiration those events would be called, since the view map is stored in the session map (correct?). I set the session timeout to 1 minute, waited, saw the timeout happen, but my listener was still not called.
I also tried adding the following to my faces-config.xml
(mostly out of the lack of ideas):
Finally, my environment is JBoss AS 7.1.1
with Mojarra 2.1.7
.
Any clues would be greatly appreciated.
EDIT: Further Investigation.
PreDestroyViewMapEvent
doesn't seem to be fired at all while PostConstructViewMapEvent
is fired as expected - every time a new view map is created, specifically during UIViewRoot.getViewMap(true)
. The documentation states that PreDestroyViewMapEvent
should be fired every time clear()
is called on the view map. That leaves to wonder - is clear()
required to be called at all? If so, when?
The only place in the documentation that I was able to find such a requirement is in FacesContext.setViewRoot()
:
If the current UIViewRoot is non-null, and calling equals() on the argument root, passing the current UIViewRoot returns false, the clear method must be called on the Map returned from UIViewRoot#getViewMap.
Does this ever happen in the normal JSF lifecycle, i.e. without programmatically calling UIViewRoot.setViewMap()
? I can't seem to find any indication.
java - MyFaces CODI - 添加到项目
我正在开发一个Maven JSF Web 应用程序。我想在一些@ViewScoped bean 上使用@PreDestroy,但是这在JSF 2.0 中是不可能的(或者在页面关闭或重定向时不行)我发现MyFaces CODI 的@ViewAccessScoped可能是解决方案,但是我在添加它时遇到了问题。当我尝试这个时:
它在编译时导致错误。
没有依赖项目运行良好。
我附上错误日志:
jsf-2 - 部分状态保存和 MyFaces CODI 出现重复 ID 错误
我正在使用 PrimeFaces3.3、MyFaces+CODI、OpenWebBeans 和 Tomcat7 开发 JSF Web 应用程序。
显示特定页面(所有后续页面操作)后,我收到重复的 Id 错误。用调试分析 viewroot,我真的找不到任何重复的 id,但我发现 'WindowContextIdHolderComponent' 的 id (j_id6) 被作为重复抛出。
自从我将 PARTIAL_STATE_SAVING 设置为“true”后,我就开始遇到这个问题。
我有一个包含选项卡的主视图,每个选项卡中都有菜单,每个菜单操作使用选项卡加载页面
下面是我的应用程序的代码和结构。
主页
Adminmain.xhtml 页面(标签页)
下面是导致重复ID错误的adminGallery页面(所有其他页面都没有这个问题)
此页面显示正确,但所有请求发布此页面显示都失败,并出现重复 ID 错误。
我的 Bean 是 CODI WindowScoped。
基于围绕 Duplicate Id 的各种建议答案,我只看到 ui:include 作为问题的潜在根源。但由于我对选项卡中或跨选项卡的其他页面没有任何问题,我怀疑这不是问题。
请提出这里可能存在的问题和潜在的解决方法。
jsf - JSF CDI(焊接)开始新的对话
我只是想知道如何在 CDI 中开始新的对话。如果没有 cid 请求参数,容器似乎开始了一个新的对话,但在某些情况下,我想从我的控制器显式地开始一个新的对话。
示例:JSF 页面用于编辑会话范围控制器 bean 的实体保持。提交了一个 ajax 请求,调用控制器的方法,该方法触发一个事件,传递一个子实体,该子实体应在新对话中的不同控制器中编辑。我找不到该问题的解决方案。我已经研究了 Apache Myfaces CODI,但也找不到解决该问题的模式。
请帮我解决这个问题。
[编辑] 好的。也许我没有足够详细地描述问题。再试一次:如果我想访问具有不同(新)对话 ID 的“相同”对话范围控制器 bean 的新实例。这是如何运作的?您拥有的图像.. 可以说.. 一个 OrderControllerBean 来编辑一个 Order 实体。这个控制器有一个 JSF 操作方法,比如 public void createSubOrder()。这个方法应该创建一个新订单并用它做一些花哨的事情。之后,它应该被传递给具有不同对话 ID 的新 OrderControllerBean 实例。也许通过使用 CDI 事件。没关系。问题是:我的对话中已经存在 OrderControllerBean。它用于编辑当前订单。所以它不能用于创建和编辑我们刚刚创建的子订单。那么如何创建 OrderControllerBean 的新实例呢?也许这不是正确的方法。但到目前为止,如果不将浏览器发送到带有空白 cid 参数的新 url,我找不到另一个可能来创建新对话。但后来我无法在这些对话之间交换信息。如何将会话 1 中创建的非持久订单带到会话 2 中的同一控制器?我的问题只是关于对话的对话。如何将会话 1 中创建的非持久订单带到会话 2 中的同一控制器?我的问题只是关于对话的对话。如何将会话 1 中创建的非持久订单带到会话 2 中的同一控制器?我的问题只是关于对话的对话。
[编辑] 到目前为止,我阅读了整个文档以及随附的所有示例。根据这些陈述(http://docs.jboss.org/cdi/spec/1.0/html/contexts.html#conversationcontext),CDI 对话似乎与 JSF 密切相关。不幸的是,我找不到更深入技术细节的文档。由于没有其他方法可以像发送新请求一样获得新对话,因此有必要在视图层中直接保留有关新对话如何以及何时开始的逻辑。这绝对不是我能想象的最好的方式。我的下一个尝试是评估 Seam 3,因为我记得 Seam 2 中有一些 @Begin 和 @End 注释可以更好地控制对话。还有一些标签库可让您指定对话传播。我想知道为什么没有其他人对我有类似的问题。要么 CDI 目前对于复杂的项目还不是很普遍,要么我在理解事情应该如何工作时遇到了很大的问题。到目前为止,我找不到任何 CDI/CODI 示例,而不仅仅是一个简单的演示。如果有人有一个示例的链接,该示例显示了对话的高级使用,无论使用哪个便携式扩展,请告诉我。
java - Tomcat + CDI + JSF2 但我的交易在哪里?
我公司有 tomcat 7 作为分布式环境。我想让 JSF2 和 CDI 在 tomcat 7 上一起工作。这是可能的,没有太多的惊喜,如下所述:http ://www.theserverside.com/tutorial/Working-with-CDI-and-JSF- 20-on-Tomcat-7-Configuring-Weld
我的问题是关于事务,没有 Java EE 3 解决方案来找我:
- 手动操作:em.getTransaction().begin() ...
- 使用我自己或 CODI 之类的 CDI 拦截器http://matthiaswessendorf.wordpress.com/2010/11/20/enterprise-java-without-ejbs-but-with-cdi-and-myfaces-codi/
- 使用弹簧事务,但据我所知,JSR 299 和 330 之间存在问题,它需要一些胶水才能工作: http: //matthiaswessendorf.wordpress.com/2010/05/06/using-cdi-scopes-with-弹簧-3/
那么,如果你是我,你会去哪里?CODI 对我来说似乎很好。
谢谢