我在某处读过,因为CDI,最好使用CDI @Named
而不是JSF @ManagedBean
,所以我试图转换我的一些代码。
我正在尝试在JSF中使用@Named
,但它始终无法访问。
使用@ManagedBean
时没有问题。
我正在使用@ManagedBean
,如下所示
CustomerBacking.java
package com.wordpress.marczykm.backing;
import javax.ejb.EJB;
import javax.enterprise.context.RequestScoped;
import javax.inject.Named;
@Named("customer")
@RequestScoped
public class CustomerBacking {
@EJB
private CustomerService customerService;
public CustomerBacking() {
}
public String addCustomer(Customer customer) {
customerService.addCustomer(customer);
return "customer_overview";
}
public Customer getCustomer(){
return customerService.getCustomer();
}
}
的index.xhtml
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core">
<h:head>
<title>EJB 3.0 Test</title>
</h:head>
<h:body>
<h:outputText value="#{customer.firstname}"/>
<h:form>
<h:outputText value="Imię"/>
<h:inputText id="firstname" name="firstname" value="#{customer.firstname}" /><br/>
<h:outputText value="Nazwisko"/>
<h:inputText id="lastname" name="lastname" value="#{customer.lastname}" /><br/>
<h:commandButton value="Dodaj" actionListener="#{customer.addCustomer}"/>
</h:form>
</h:body>
</html>
答案 0 :(得分:1)
总结一下,看看Netbeans样本CDI应用程序,需要JSF页面可访问的bean需要:
答案 1 :(得分:0)
您没有提到您正在使用哪个servlet容器/应用程序服务器以及哪个CDI实现版本。
我不清楚Spring Tool Suite默认采用的是什么,可能是Tomcat,Spring而且根本没有CDI,所以你必须添加和配置CDI实现(例如Weld或OpenWebBeans)。
对于CDI 1.0,您必须添加WEB-INF/beans.xml
描述符(可能为空)才能发现您的bean。这不再是CDI 1.1的必要条件。