2012-05-13 3 views
1

Я пытаюсь привнести пружинную фасоль в JSF фасоль, я использую Spring 3.1 и JSF 2 (Mojarra 2.1.7)Proxy Исключения при нагнетании пружинного компонента в JSF фасоли

Без много говорить мою конфигурация и код и исключения перечислены в следующем:

StudentService.java:

@Scope(proxyMode=ScopedProxyMode.TARGET_CLASS) 
public class StudentsService extends AbstractMaqraaService { 

    @Override 
    public Set<Class<?>> getTypes() { 
     // TODO Auto-generated method stub 
     return null; 
    } 

    public Student registerStudent(Student student) { 
     return this.store(student); 
    } 

} 

StudentRegistrationMBean.java:

@ManagedBean(name="studentRegistrationMBean") 
@SessionScoped 
public class StudentRegistrationMBean extends AbstractMBean { 

    private Student student; 
    @ManagedProperty (value="#{studentsService}") 
    private StudentsService studentsService; 

    public StudentRegistrationMBean() { 
     this.student = new Student(); 
    } 

    /*Setters and getters omitted here only*/ 

    public String register() { 

     studentsService.registerStudent(student); 
     return "manageStudents"; 
    } 
} 

Spring боб в модуле файл контекста XML:

<bean id="abstractMaqraaService" class="org.tts.maqraa.service.AbstractMaqraaService" abstract="true"/> 

<bean id="studentsService" class="org.tts.maqraa.service.StudentsService" lazy-init="default" parent="abstractMaqraaService"/> 

лица-config.xml:

... 
<application> 
     <el-resolver>org.springframework.web.jsf.el.SpringBeanFacesELResolver</el-resolver> 
</application> 
... 

Eception:

TRACE [http-bio-8080-exec-3] (SpringBeanELResolver.java:53) - Successfully resolved variable 'studentsService' in Spring BeanFactory 
DEBUG [http-bio-8080-exec-3] (AbstractBeanFactory.java:245) - Returning cached instance of singleton bean 'studentsService' 
نوار 13, 2012 11:10:45 ص com.sun.faces.application.view.FaceletViewHandlingStrategy handleRenderException 
SEVERE: Error Rendering View[/teacher/registerNewStudent.xhtml] 
com.sun.faces.mgbean.ManagedBeanCreationException: Unable to set property studentsService for managed bean studentRegistrationMBean 
    at com.sun.faces.mgbean.ManagedBeanBuilder$BakedBeanProperty.set(ManagedBeanBuilder.java:615) 
    at com.sun.faces.mgbean.ManagedBeanBuilder.buildBean(ManagedBeanBuilder.java:133) 
    ... 
    at java.lang.Thread.run(Unknown Source) 
Caused by: javax.el.ELException: Cannot convert [email protected] of type class $Proxy10 to class org.tts.maqraa.service.StudentsService 
    at org.apache.el.lang.ELSupport.coerceToType(ELSupport.java:420) 
    at org.apache.el.ExpressionFactoryImpl.coerceToType(ExpressionFactoryImpl.java:47) 
    at com.sun.faces.el.ELUtils.coerce(ELUtils.java:536) 
    at com.sun.faces.mgbean.BeanBuilder$Expression.evaluate(BeanBuilder.java:592) 
    at com.sun.faces.mgbean.ManagedBeanBuilder$BakedBeanProperty.set(ManagedBeanBuilder.java:606) 
    ... 47 more 

ERROR [http-bio-8080-exec-3] (MaqraaExceptionHandler.java:83) - Exception 
javax.el.ELException: Cannot convert [email protected] of type class $Proxy10 to class org.tts.maqraa.service.StudentsService 
    at org.apache.el.lang.ELSupport.coerceToType(ELSupport.java:420) 
    ... 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) 
    at java.lang.Thread.run(Unknown Source) 

Я много искал в Google и нашел много вопросов, здесь возникали такие проблемы, как мои, но ничего не помогло мне, я надеюсь, что найду свое решение для своего особого случая !!

+0

Я не использую Spring, но не должна ваш 'StudentRegistrationMBean' будет Spring управляемого компонента вместо JSF управляемого компонента для того, чтобы иметь возможность внедрить управляемый bean-компонент Spring? По крайней мере, это то, как работает инъекция зависимостей JSF и стандартная инъекция зависимостей стандарта ISO EE 6. – BalusC

+0

@BalusC Я использую '@ ManagedBean' и' SpringBeanFacesELResolver' для инъекций! почему я не должен этого делать! во всяком случае, я просто следую многим статьям и статьям, рассказывающим о том, как вводить инъекции, и, кажется, во всех этих статьях инъекционная работа хорошо работает! и у меня просто есть небольшая проблема, которая дала мне головную боль: | –

ответ

3

<aop:aspectj-autoproxy proxy-target-class="true"/> использования для обеспечения использования прокси JDK, а не CGLIB

+0

спасибо много да, это решение моей проблемы;) –

0

если вы впрыснуть ваш Spring служба, как это не забудьте создать сеттер для вашей службы:

@ManagedProperty (value="#{studentsService}") 
private StudentsService studentsService; 

public void setStudentsService (StudentsService studentsService) 
{ 
    this.studentsService = studentsService; 
} 

С @Autowired аннотацией не было никакой необходимости делать это.

Посмотрите на это answer Это не использование интерфейса для использования вашего прокси.

+0

спасибо, но да, я сделал это уже. –

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