【发布时间】:2012-08-11 03:04:58
【问题描述】:
这是一个基于 glassfish 的 jsf 项目,由 Netbeans 开发。我尝试将我的 bean 连接到我的常规 java 类。
这是我的理解:
- 托管 bean 或其 CDI 等效项负责处理与 UI 相关的用户数据(例如,用户输入)
- 业务逻辑在常规 java 类中实现
- 2 个托管 bean 或其 CDI 等效项可以与 @injection 通信
我缺少的是:bean 如何与常规 java 类 通信? (我的业务逻辑在哪里?)
换句话说,我希望我可以通过使用 bean 作为其构造函数的参数来运行我的 java 类!
我试过了:
- 在我的 java 类中包含 @Inject 注释,但这不起作用(bean 未注入,保持为空)
喜欢
public class myJavaProgram (){
@Inject
UserInputBean userInputBean;
//my business logic using the properties of userInputBean here... //does not work, userInputBean is null!
}
- 在我的 java 类的构造函数中将 bean 的属性作为参数传递。有效,但丑陋:为什么我不能简单地将整个 bean 作为参数直接传递给构造函数?但是当我这样做时,我的 java 类中的 bean 再次出现空指针异常。
我错过了什么吗?谢谢!
【问题讨论】:
-
一个非常开放的问题,更多细节会有所帮助。但无论如何,在我们的应用程序中,我们扭转了局面。我们有命令按钮委托给的动作处理程序类,这些类要么直接实例化业务对象,要么将业务对象注入其中。换句话说,让您的业务对象成为您的操作处理程序的客户端,而不是尝试使用 bean 作为您的业务对象的客户端。
-
我的 pb 非常简单:我的 bean 从用户输入中收集 2 个字符串:名字和姓氏。我想将这两个字符串导出到一个类中,该类执行一个将这两个字符串作为参数的 API 调用。您的解决方案很有趣,但我很惊讶没有更直接的方法来处理它?无论如何谢谢@SteveAtkinson
-
我不明白,你需要像
public class Bean { String s1; String s2; public void someAction() { BL bl = new BL(); bl.doSomething(s1, s2); //...} }这样的东西,然后在你的页面中使用<h:commandButton value="click me" action="#{bean.someAction}" />? -
@LuiggiMendoza 我不认为 OP 真的知道他的问题是什么,他似乎从根本上对依赖注入和控制框架反转的概念感到困惑。
-
这只是基本的 Java。您是 Java 新手吗?根据您的问题历史,我强烈建议您选择一本不错的 Java 和 Java EE 书籍。
标签: jsf netbeans glassfish javabeans facelets