我使用JSF和托管Beans创建了一个简单的应用程序。从托管bean,我试图实例化一个将数据存储到数据库的spring bean。然而,“@autowired”注释似乎不起作用,因为我得到了一个nullpointerexcpetion。我阅读了关于如何在Spring中使用JSF和托管bean的所有相关主题,但不能解决这个问题。也许有人可以看看下面的代码,给我一个提示?
########## ManagedBean ######### @Component @Scope("request") @Qualifier("memberBean") public class ProjectEntityHandlerBean { private List projectList; @Autowired private ProjectBeanLocal projectBean; public ProjectEntityHandlerBean() { } public List getProjectList() { return projectList; } public String getAllProjects() { projectList = projectBean.getAllProjects(); return "true"; }
服务Bean
@Service public class ProjectBean implements ProjectBeanLocal { @PersistenceContext private EntityManager em; /** * Default constructor. */ public ProjectBean() { // TODO Auto-generated constructor stub } @Transactional public List getAllProjects() { System.out.println("ProjectBean invoked"); Query query = em.createQuery("SELECT p FROM Project p"); @SuppressWarnings("unchecked") List projects = query.getResultList(); return projects; }
faces.config.xml
<application>
<el-resolver>org.springframework.web.jsf.el.SpringBeanFacesELResolver</el-resolver>
</application>
<managed-bean>
<managed-bean-name>loginBean</managed-bean-name>
<managed-bean-class>com.example.controller.LoginBean</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>
<managed-bean>
<managed-bean-name>ProjectEntityHandlerBean</managed-bean-name>
<managed-bean-class>com.example.controller.ProjectEntityHandlerBean</managed-bean-class>
<managed-bean-scope>request</managed-bean-scope>
</managed-bean>
如果您看到您的配置@component
是一个Spring注释。您正在faces-config.xml
中安装ProjectEntityHandlerBean
。因此,首先将ProjectEntityHandlerBean
实例化为JSF ManagedBean。
因此,必须@managedproperty
或
像这样将服务类注入到JSF托管bean中。
<managed-bean>
<managed-bean-name>ProjectEntityHandlerBean</managed-bean-name>
<managed-bean-class>com.example.controller.ProjectEntityHandlerBean</managed-bean-class>
<managed-bean-scope>request</managed-bean-scope>
<managed-property>
<property-name>ProjectBeanLocal</property-name>
<property-class>Qualified path for this class</property-class>
<value>#{projectBeanLocal}</value>
</managed-property>
</managed-bean>
从上面的ProjectEntityHandlerBean
中删除@autowired
。
重要:
您只能使用@autowired
注释注入一个spring bean另一个spring bean。如果您想要将一个spring bean注入到JSF ManagedBean,或者将一个JSF ManagedBean注入到另一个JSF ManagedBean,如果您使用的是JSF2.0或更高版本,则可以使用@ManagedProperty
,或者对于JSF1.2版本使用
。
主要内容:实例,运行测试结果以下代码显示了如何进行bean注入。 我们先定义一个消息bean,它有一个字符串属性来存储消息。 然后我们再定义另一个托管bean,并使用注解注入。 实例 打开 NetBean8.2,创建一个名为: InjectManagedBeans 的工程,并加入以下文件代码。 以下是文件:UserBean.java 中的代码 - 以下是是文件:index.xhtml 中的代码 - 以下是文件:Message
托管bean它是一个纯Java类,它包含一组属性和一组,方法。 以下是托管bean方法执行的常见功能: 验证组件的数据 处理组件触发的事件 执行处理以确定应用程序必须导航的下一页 它也可以作为JFS框架的模型。 JSF托管Bean示例 请看看下面一段示例代码 - 您可以通过以下方式使用此。 通过配置成XML文件。 通过使用注释。 通过XML文件配置托管Bean 在xml文件配置是比较旧方法。 在这
主要内容:使用XML配置,使用@ManagedBean注解JSF 托管bean(Managed Bean)是JSF注册的常规Java Bean类。托管bean包含getter和setter方法,业务逻辑。JSF托管bean作为UI组件的Model。 它存储JSF xhtml页面使用的数据。借助JSF框架,可以从JSF页面访问托管Bean。 在JSF 1.2中,我们必须在JSF配置文件(如)中注册受管理的bean。 从JSF 2.0可以使用注解注册管理be
我正计划将一个web应用程序从使用JSF托管bean转换为使用CDI托管bean。我知道我需要做以下工作: 在WEB-INF中添加空beans.xml文件。 将所有JSF@ManagedBean替换为CDI@Named Annotations。 用CDI或OmniFaces作用域注释替换所有JSF作用域注释。 将所有JSF@ManagedProperty替换为CDI@Inject Annotati
如何从Servlet访问JSF ViewScope托管bean? (假设所讨论的托管bean已经创建,但尚未销毁)
在执行CRUD时,我有一个RequestScope票据bean。 我有一个XHTML页面,直到现在我一直在使用它来创建新的票据;票证字段直接填充(等等) 现在我有了一个搜索表单,它列出了票证,每个票证都有一个以票证id为参数的链接。我希望支持bean从EJB/JPA(已经完成)检索票证bean并将其放入请求中。我认为有三种方法可以做到这一点: 将从JPA检索到的bean中的数据复制到注入提供的be