2012-06-22 6 views
0

У меня возникли проблемы с работой аннотаций JSF. Я потратил некоторое время, пытаясь понять это. Я использую Maven + Tomcat7 + JSF2.16 + JDK1.7 + Spring 3 + Hibernate 4. Пожалуйста, простите меня заранее, если это что-то простое, так как я новичок.JSF2 аннотации не работают при использовании Spring

Вот мой pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 

<modelVersion>4.0.0</modelVersion> 
<groupId>com.uk.todolist</groupId> 
<artifactId>UkToDoList</artifactId> 
<packaging>war</packaging> 
<version>1.0-SNAPSHOT</version> 
<name>UkToDoList</name> 
<url>http://maven.apache.org</url> 

<repositories> 
    <repository> 
     <id>prime-repo</id> 
     <name>PrimeFaces Maven Repository</name> 
     <url>http://repository.primefaces.org</url> 
     <layout>default</layout> 
    </repository> 
</repositories> 

<properties> 
    <spring.version>3.1.1.RELEASE</spring.version> 
    <spring.security.version>3.0.5.RELEASE</spring.security.version> 
</properties> 


<dependencies> 

    <!-- Spring 3 dependencies --> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-core</artifactId> 
     <version>${spring.version}</version> 
    </dependency> 

    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-context</artifactId> 
     <version>${spring.version}</version> 
    </dependency> 

    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-web</artifactId> 
     <version>${spring.version}</version> 
    </dependency> 

    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-tx</artifactId> 
     <version>${spring.version}</version> 
    </dependency> 

    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-orm</artifactId> 
     <version>${spring.version}</version>    
    </dependency> 

    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-webmvc</artifactId> 
     <version>${spring.version}</version> 
    </dependency> 

    <!-- Spring Security --> 
    <dependency> 
     <groupId>org.springframework.security</groupId> 
     <artifactId>spring-security-core</artifactId> 
     <version>${spring.security.version}</version> 
    </dependency> 

    <dependency> 
     <groupId>org.springframework.security</groupId> 
     <artifactId>spring-security-web</artifactId> 
     <version>${spring.security.version}</version> 
    </dependency> 

    <dependency> 
     <groupId>org.springframework.security</groupId> 
     <artifactId>spring-security-config</artifactId> 
     <version>${spring.security.version}</version> 
    </dependency> 

    <!-- JSF library --> 
    <dependency> 
     <groupId>com.sun.faces</groupId> 
     <artifactId>jsf-api</artifactId> 
     <version>2.1.6</version> 
    </dependency> 

    <dependency> 
     <groupId>com.sun.faces</groupId> 
     <artifactId>jsf-impl</artifactId> 
     <version>2.1.6</version> 
    </dependency> 

    <dependency> 
     <groupId>javax.servlet</groupId> 
     <artifactId>jstl</artifactId> 
     <version>1.2</version> 
    </dependency> 

    <!-- Primefaces library --> 
    <dependency> 
     <groupId>org.primefaces</groupId> 
     <artifactId>primefaces</artifactId> 
     <version>3.1.1</version> 
    </dependency> 

    <!-- Hibernate library --> 
    <dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-core</artifactId> 
     <version>4.1.0.Final</version> 
    </dependency> 

    <!-- MySQL Java Connector library --> 
    <dependency> 
     <groupId>mysql</groupId> 
     <artifactId>mysql-connector-java</artifactId> 
     <version>5.1.20</version> 
    </dependency> 

    <dependency> 
     <groupId>c3p0</groupId> 
     <artifactId>c3p0</artifactId> 
     <version>0.9.1.2</version> 
    </dependency>    

    <!-- Log4j library --> 
    <dependency> 
     <groupId>log4j</groupId> 
     <artifactId>log4j</artifactId> 
     <version>1.2.17</version> 
    </dependency> 

</dependencies> 

<build>  
    <finalName>UkToDoList</finalName> 
</build> 

Моей Faces конфигурационный файл объявлен как JSF 2 следующим образом

<?xml version="1.0" encoding="UTF-8"?> 
    <faces-config 
    xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee  http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd" 
version="2.0"> 

Мой управляемый компонент помечаются следующий

@ManagedBean 
    @ViewScoped 
    public class TaskManagedBean implements Serializable { 

private static final long serialVersionUID = 1L; 
private static final String SUCCESS = "success"; 
private static final String ERROR = "error"; 

//NOTE: Task Service is injected 
@ManagedProperty(value="#{TaskService}") 
TaskService taskService; 

Если я де Clare управляемых бобов в гранях-конфигурации, как так

 <managed-bean> 
     <managed-bean-name>taskManagedBean</managed-bean-name> 
     <managed-bean-   class>com.uk.todolist.managed.bean.TaskManagedBean</managed-bean-class> 
     <managed-bean-scope>session</managed-bean-scope>  
    </managed-bean> 

Это работает, но я не понимаю, почему аннотации нет.

Любая помощь или я буду очень признателен вам! Спасибо!

+0

Я добавил в faces-config "metadata-complete =" false ">" и поместил пустой каталог-config в папку META-INF, как предложено на этом post http://stackoverflow.com/questions/2987266/why-doesnt-jsf-2-0-ri-mojarra-scan-my-class-annotations просто вставлять, но это ничего не меняет. – Curt

ответ

0

Я не думаю, что вы можете использовать аннотацию JSF для beans. Но может быть, я ошибаюсь

Я использую те же технологии, что и вы, и я не использую аннотацию JSF. Мне это нравится:

@Component 
@Scope(value = "session") 
public class TaskManagedBean implements Serializable { 

private static final long serialVersionUID = 1L; 
private static final String SUCCESS = "success"; 
private static final String ERROR = "error"; 

//NOTE: Task Service is injected 
@Autowired 
TaskService taskService; 

И не забудьте вставить, как сказал Петтер.

<context:component-scan base-package="your.base.package" /> 

Вы должны знать, что нет view масштабов весной, и вы должны реализовать себя. Но не бойтесь, что есть много примеров: https://www.google.fr/search?sugexp=chrome,mod=7&sourceid=chrome&ie=UTF-8&q=spring+custom+viewscope

+0

Спасибо, это сработало красиво! – Curt

0

Попробуйте добавить это в свой конфигурационный файл конфигурации Spring Spring.

<context:component-scan base-package="your.base.package" /> 

Он должен отсканировать ваши классы для бобов.

Смежные вопросы