我知道存在很多问题,我读了很多,没有人可以帮助我。谢谢你的帮助。
我不喜欢在xml中定义每个bean的spring方式,所以我在我的apllication上下文中使用了一个扫描程序,但我认为只有@Component(我的托管bean),但它不想捕获@Service和@Repository,我说我的服务是空的。
这是web.xml中的spring东西
<!-- Archivo de configuraciones de Spring y JSF -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:WEB-INF/context/applicationContext*.xml</param-value>
</context-param>
<!-- Línea especial para la integración con un Java-based web framework (JSF) -->
<listener>
<listener-lass>org.springframework.web.context.ContextLoaderListener
这就是我的application-context.xml
<context:spring-configured/>
<!-- Escanear todos los componentes y beans en vez de instanciar 1 por 1 -->
<context:component-scan base-package="paquete" />
<mvc:annotation-driven />
<!-- Identificar todos los beans por las anotaciones -->
<tx:annotation-driven transaction-manager="transactionManager"/>
<!-- Archivo de propiedades configurables (database, messages, etc) -->
<context:property-placeholder location="classpath*:META-INF/*.properties"/>
<!-- Gestor de transacciones de SPRING -->
<tx:annotation-driven transaction-manager="transactionManager"/>
<bean class="org.springframework.orm.jpa.JpaTransactionManager" id="transactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory"/>
</bean>
<!-- El conversador entre nuestras entidades y las tablas de BD -->
<bean id="entityManagerFactory"
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="persistenceUnitName" value="persistenceUnit" />
<property name="persistenceXmlLocation" value="classpath:/WEB-INF/persistence.xml" />
<property name="dataSource" ref="dataSource" />
<property name="loadTimeWeaver">
<bean class="org.springframework.instrument.classloading.InstrumentationLoadTimeWeaver" />
</property>
<property name="jpaVendorAdapter" ref="vendorAdapter" />
</bean>
<!-- Integración de Spring e Hibernate, no es obligatorio -->
<bean id="vendorAdapter"
class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
<property name="databasePlatform" value="${hibernate.dialect}" />
<property name="showSql" value="${hibernate.show_sql}" />
<property name="generateDdl" value="true" />
</bean>
<!-- Formalidad de dataSource de SPRING -->
<bean class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close" id="dataSource">
<property name="driverClassName" value="${database.driverClassName}"/>
<property name="url" value="${database.url}"/>
<property name="username" value="${database.username}"/>
<property name="password" value="${database.password}"/>
<property name="testOnBorrow" value="true"/>
<property name="testOnReturn" value="true"/>
<property name="testWhileIdle" value="true"/>
<property name="timeBetweenEvictionRunsMillis" value="1800000"/>
<property name="numTestsPerEvictionRun" value="3"/>
<property name="minEvictableIdleTimeMillis" value="1800000"/>
</bean>
在我的包裹“paquete”(西班牙语包,我来自秘鲁,对不起我的英语不好)我有3个子包,所以在netbeans中,我看到3个包,如“paquete.beans”,“paquete.service”和“paquete” .repositorios”。我在“paquete”包中用组件扫描器调用了
我正在使用primefaces,因此你需要一个helloJSFBean。
@ManagedBean
@Scope("session")
@Component
public class helloPageJSFBean {
private String nombre;
private String nombre2;
public String getNombre2() {
return nombre2;
}
public void setNombre2(String nombre2) {
this.nombre2 = nombre2;
}
@Autowired
HelloService helloService;
@PostConstruct
public void init(){
nombre="hi";
}
public void saludar(ActionEvent actionEvent){
nombre2=helloService.saludar(nombre);
}
/*
*Getters and Setters
*/
public String getNombre() {
return nombre;
}
public void setNombre(String nombre) {
this.nombre = nombre;
}
}
所以我打电话给我的helloService并且是......
@Service
public class HelloServiceImpl implements HelloService{
@Autowired
protected HelloRepository helloRepository;
@Override
public String saludar(String nombre) {
return helloRepository.saludar(nombre);
}
}
我的存储库是
@Repository
public class HelloRepositoryImpl implements HelloRepository {
@Override
public String saludar(String nombre) {
return "Hola "+nombre+", estás haciendo un excelente trabajo";
}
}
问题是我在我的“saludar”方法中得到了NullPointerException
,在调试中我的服务是null并且不是helloServiceImpl的实例,所以我想@Autowired它不能正常工作。
我收到的所有帮助都会很棒,我已经失去了2周而没有任何帮助。谢谢大家。
答案 0 :(得分:2)
好吧,我不知道为什么在文件位置的定义中使用classpath,所以,我想到类路径,当有人把“classpath *:directory / file.ext”强制IDE搜索文件的位置时放置java类时的SRC路径。并且显然没有文件夹(在我的配置proyect中)所以y删除定义上的类路径并且它可以工作。
所以,如果这对任何人都很有用,我很高兴。我要感谢你们所有人的时间和考虑回答。谢谢!!
这就是我的项目结构。我正在研究netbeans,这个页面说我不能发布图片,很好的链接
http://img17.imageshack.us/img17/6338/sinttulofwk.png
我的配置文件......
Web.xml中
<!-- Archivo de configuraciones de Spring y JSF -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>WEB-INF/context/applicationContext*.xml</param-value>
</context-param>
的applicationContext.xml
...
...
<!-- Archivo de propiedades configurables (database, messages, etc) -->
<context:property-placeholder location="META-INF/database.properties"/>
...
...
<!-- El conversador entre nuestras entidades y las tablas de BD -->
<bean id="entityManagerFactory"
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="persistenceUnitName" value="persistenceUnit" />
<property name="persistenceXmlLocation" value="WEB-INF/persistence.xml" />
<property name="dataSource" ref="dataSource" />
<property name="loadTimeWeaver">
<bean class="org.springframework.instrument.classloading.InstrumentationLoadTimeWeaver" />
</property>
<property name="jpaVendorAdapter" ref="vendorAdapter" />
</bean>
如果有人可以告诉我,类路径是否认为它的严重或错误,请感谢。此致
答案 1 :(得分:0)
阅读this页面,您需要设置:
<!-- JSF and Spring are integrated -->
<application>
<el-resolver>
org.springframework.web.jsf.el.SpringBeanFacesELResolver
</el-resolver>
</application>
在 faces-config.xml 中,并使用@ManagedProperty(value="#{name of your service}")
而不是@Autowired
引用Spring bean。