问题标签 [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.

0 投票
1 回答
1723 浏览

jsf-2 - Apache MyFaces CODI PageBean:“参数 bean 不能为空”

我目前正在尝试使用 Apache MyFaces CODI。我设法使用@Page 和一个返回类的操作方法创建了一个简单的工作类型安全导航。

但是,当我使用例如 MyPageBean.class 添加@PageBean-Annotation 时,当我尝试导航到页面时会引发以下异常:

我的页面代码是:

和我的页面豆:

Facelets页面调用的Action-Method:

pageBean-Class (MyPageBean) 是否需要有特定的注解或接口?我已经尝试过使用@Model,但这并没有改变任何东西。

我的配置:

  • Jave EE6 with Weld(使用焊接原型创建)
  • Glassfish 3.1 社区版(Netbeans 7 附带的版本)
  • JSF2.0 (Mojarra 2.1)
  • EJB 3.1
  • MyFaces CODI 0.9.4
  • RichFaces 4.0.0.Final

感谢您的任何建议!

最好的问候,罗伯特

0 投票
2 回答
525 浏览

java - JSF:MyFaces CODI 类型安全导航和 f:viewParam

我正在尝试 MyFaces CODI 的精彩功能。一个非常有用的东西是类型安全导航。我可以像这样在我的控制器 bean 中指定操作方法的结果:

这真的很酷,因为每个开发 IDE 的过度重构能力。

但是当我想使用这个功能时,我在将 viewParameter 传递给下一个视图时遇到了问题。我必须使用命令按钮来调用此操作方法,如下所示:

如果我使用此命令按钮,我将无法传递参数。“正常”按钮或链接可以做到这一点:

缺点是“普通”按钮不使用操作方法,因此我无法参与 CODI 类型安全导航的优势。

那么有没有可能将这两个功能结合起来呢?(传递视图参数并使用类型安全导航)

提前致谢!

0 投票
1 回答
1887 浏览

jsf-2 - 如何使用 CODI 对话?具体来说,如何结束呢?

根据此处此处发布的建议,我查看并使用我的应用程序安装了MyFaces CODI。我最担心的是克服 Weld 实现 @ConversationScoped 功能的缺点。在遇到一些小问题后,我让它在我的 GlassFish 3.1 开发平台上运行,然后我将所有 bean 转换为使用

最后,我现在似乎并没有比以前走得更远。我不必再调用conversation.begin()方法了,这很好,但是 bean 在浏览器离开页面并返回后会徘徊。

我所希望的是与 CDI 一起使用的 JSF 2.0 @ViewScoped 的功能。一旦用户离开页面,如果用户回来,支持 bean 应该被丢弃并重新创建。有没有办法用 CODI 做到这一点?

顺便说一句,文档说它将获取 @ViewScoped 注释并正确处理它们。我尝试了这个并且得到了并且 Weld 不会部署它。

PS 我正在使用 myfaces-extcdi-dist-jsf20 0.9.5 版。我尝试安装核心和 JSF 2 可选模块 akibe,但它不会部署在我的 GlassFish/Weld 平台上。非常感谢这里的任何建议。

更新 1:我最终尝试了 CODI 支持的 ViewAccessScope 注释,这似乎符合我的要求。

后续问题。Apache 维护的 maven 存储库的最新捆绑包是 0.9.5——有人可以发布获取最新版本的 pom.xml 段吗?

0 投票
2 回答
1740 浏览

jsf-2 - MyFaces CODI 和 windowId 请求参数问题

我一直在尝试对Seam WeldMyFaces CODI进行一些简单的测试。将 CODI jar 文件添加到我的项目后,我发现它会为每个请求添加一个windowId请求值,即使 bean 范围是RequestScoped也是如此。当 bean 在RequestScoped中时,是否真的有必要为每个请求添加windowId请求参数?这种情况下是否有任何实际的现实场景?如果没有必要,是否可以删除它?例如:

这是bean类的代码:

这是页面的正文:

0 投票
1 回答
419 浏览

jsf-2 - 使用 MyFaces CODI,我没有在不同的浏览器选项卡中获得不同的 windowid 值——为什么?

我正在使用 MyFaces CODI,因为它允许我将 CDI 注释与 ViewAccessScoped 一起使用——非常适合。问题是我发现我的应用程序打开的多个浏览器选项卡共享同一个@ViewAccessScoped支持 bean 的实例。尴尬的。不受欢迎。

在我的页面中,我有这样的事情:

(这实际上是通过 Primefaces p:dataGrid组件运行的迭代完成的,但我在这里尝试简化。)

单击任何链接将导致浏览器打开一个新窗口(选项卡),并且它打开的 JSF 网页引用@ViewAccessScoped支持 bean。但是,它们都获得相同的 windowid,这与包含链接的主窗口相同。我认为这就是为什么它们都获得相同的支持 bean 实例的原因。

有人知道怎么修这个东西吗?

0 投票
2 回答
353 浏览

jsf - Myfaces CODI、@Inject 和内存使用情况

我在我的 JSF 应用程序中使用 Myfaces CODI @ViewAccessScoped 支持 bean。好处之一是我不需要使用视图参数来在视图之间传递信息。作为记录,@ViewAccessScoped 确保 bean 是可访问的,直到新视图的第一个请求不访问它。以我想将字符串值从 page1 传递到 page2 的情况为例:

Page1Bean.java(page1.xhtml 的支持 bean)

Page2Bean.java(page2.xhtml 的支持 bean)

如果我直接从 page1 导航到 page2,那么当我从 page2 访问 #{page2Bean.target} 时,它的值是“hello, world!”。

实际上,我将数据从 page1 视图推送到 page2 视图。另一种选择是将数据从 page1 视图拉到 page2 视图中,因此在 page2Bean 中我 @Inject Page1Bean 和 @ViewAccessScoped 确保我可以访问 page1Bean.getSource() (只要它在前一个视图中)。

这一切都很好,但在现实世界中,我可能想从 page1 导航到许多其他页面中的任何一个,具体取决于用户输入。所以 Page1Bean.java 最终看起来像这样:

Page1Bean.java(已修改)

现在我的问题是:page1Bean 的内存占用是否总是包含 page2Bean-page8Bean?还是仅在我在运行时访问@Inject ed bean 之一时才使用内存?

我希望这不是一个太天真的问题,但我不确定它究竟是如何工作的,如果第一个问题的答案是肯定的,我或多或少最终会使用@SessionScoped!。

感谢您的任何澄清。

0 投票
2 回答
879 浏览

codi - 如何设置 CODI 项目阶段?

我通过一个小贴士找到了这个wiki 页面,但我无法理解它。在我的 JSF 应用程序中,如何告诉 CODI 我想在开发模式下运行?是否有 web.xml 设置或者我必须在某处使用注释?

非常感谢您的帮助。

0 投票
2 回答
1669 浏览

cdi - 基类中的@Inject 在基类方法中为空,在派生类中可以

在下面的代码中,我试图将 SessionScoped bean 注入到无状态 EJB 中,但我想在 EJB 的抽象基类中执行 @Inject。根据 CDI 规范,它似乎表明这应该有效(绝不是浪费文字的规范):

"4.2. 成员级元数据的继承

假设类 X 由托管 bean 或会话 bean Y 的 bean 类直接或间接扩展。

如果 X 声明一个注入字段 x,则 Y 继承 x。”

发生的情况是我可以从 TestEjb 访问继承的受保护成员 sessionView,但不能从基类中的代码访问。当我说“可以访问”时,我的意思是注入的成员在运行时可以访问并且不为空。

发生的情况是 s1 是有效的 SessionView 引用,但 s2 为空。

我将 MyFaces CODI 1.01 与 Glassfish 3.1.1 中的 Weld 结合使用。我尝试从 BaseClass 中删除抽象,甚至添加了@Named,但这并没有帮助,我看不出我做错了什么。

就目前而言,看起来我必须从基类继承 sessionView 并将其作为参数传递回基类中的方法。因此,如果有人能指出我是否在做一些愚蠢的事情,我将不胜感激,也许这是一个 CODI/焊接问题?

谢谢。

0 投票
1 回答
767 浏览

jsf-2 - 如何在@WindowScoped 上检索对象?

在这篇动态 ui:include帖子中,我询问了如何将对象存储在某种状态下,以允许我加载同一浏览器的新窗口或选项卡,并且它也没有存储在新窗口中。Adrian Mitev 告诉我使用@WindowScoped名为 CODI 的 MyFaces 扩展选项,我尝试实现它。

现在我应该说我是盲人,当我试图打开 Apache Wiki 时,我的浏览器在许多页面上崩溃,所以我无法阅读指南。

但是我在我的项目中添加了源代码,编译器没有给出任何错误。问题是,现在当我尝试检索我存储的 bean 时页面@WindowScoped无法正常工作!

我在我的 bean 中使用这个代码:

include.xhtml我使用以下代码检索参数时:

在我的其他 bean 中,我LogicBean使用此代码检索 (我确定问题出在此代码上)

如何检索“正确”的 LogicBean 对象?

0 投票
1 回答
840 浏览

jsf-2 - 如何检查使用 @WindowScoped 存储的对象是否正确存储?

两天前我写了这个问题: 如何在@WindowScoped 上检索对象? BalusC 回答了一些建议,现在我有一些问题要理解,如果我的问题是 WindowScoped 中的对象存储正确还是我检索它的代码是错误的!

好吧,正如我所说,我有一个存储在 @WindowScoped 注释中的对象,但我只能在第一次检索这个对象!为什么?

我只是有一个疑问:可以以某种方式配置 MyFaces 的 CODI 扩展吗?或者我可以使用它简单地将 jar 文件添加到我的项目中?

但是,这些是我的代码的一部分,因为我不知道问题出在哪里:

LogicBean.java(我应该检索的对象):

包括.xhtml:

ProgettiController.java

我也尝试使用 @ManagedProperty("#{logicBean}") 并将范围设置为 WindowScoped 但没有任何改变......


编辑:经过一些新的试验后,我发现了一个奇怪的问题,在我的 include.xhtml 上,我添加了 #{progettiController.logicBean.getPageIncluded()} 和 #{logicBean.getPageIncluded()} 来检查这两个字段吗?

好吧,当我第一次加载应用程序时,变量设置正确并且我看到了我想要的,第二次第一个变量设置了新值但第二个是空的,我什么也看不到,但是现在奇怪的事情来了...如果我应该再试一次应用程序,我应该打开 index.xhtml ,其中有一些像这样的表单:

结果是什么?第一个变量仍然设置为旧值(错误),但第二个设置正确,因此我可以像我一样查看页面!如果有人可以帮助我,我将永远感谢他/她!