2

영어로 죄송합니다. TaskBO 클래스에 @ManagedProperty을 설정하고 싶지만 작동하지 않습니다. 내가 인터페이스 ITaskBO를 추가하는 경우는 작품이다,JSF ManagedProperty가 클래스에 작동하지 않습니다.

javax.servlet.ServletException: Unable to set property taskBO for managed bean taskMB 
javax.el.ELException: java.lang.IllegalArgumentException: Cannot convert [email protected] of type class $Proxy135 to class com.otv.model.bo.TaskBO 

:하지만 TaskMB 클래스 : 클래스 TaskBO

@ManagedProperty(value="#{TaskBO}") 
public ITaskBO taskBO; 

public ITaskBO getTaskBO() { 
    return this.taskBO; 
} 

public void setTaskBO(ITaskBO taskBO){ 
    this.taskBO = taskBO; 
} 

왜 작동 @ManagedProperty

@ManagedBean(name="taskMB") 
@RequestScoped 
public class TaskMB implements Serializable { 

    @ManagedProperty(value="#{TaskBO}") 
    public TaskBO taskBO; 

    public TaskBO getTaskBO() { 
     return this.taskBO; 
    } 

    public void setTaskBO(TaskBO taskBO){ 
     this.taskBO = taskBO; 
    } 
    //... 
} 

그것은 오류를 인쇄?

답변

1

발생한 문제를 방지하기 위해 구체적인 클래스 대신 가장 좋은 와이어 인터페이스입니다.

Cannot convert [email protected] of type class $Proxy135 to class com.otv.model.bo.TaskBO

종종 봄의 관리 객체가 프록시하고 자바 프록시가 인터페이스 만이 아니라 구체적인 클래스에 캐스트 할 수있다; 위의 오류가 발생하는 이유는

  1. TaskBO 객체가 $ Proxy135 (개체의 실제 유형은 이제 정말 구상 클래스 TaskBO 것이 아니라 Spring에 의해 관리 및 형식의 개체로 프록시됩니다 당신이 캐스팅 할 수있는 프록시 ITaskBO는 $ Proxy135) 당신은 public TaskBO taskBO = (TaskBO)$Proxy135; 같은 몇 가지 일을하려고하지만 구체적인 클래스에 대한 프록시가 불가능 캐스팅되어
  2. 올바른 방법은 public ITaskBO taskBO = (ITaskBO)$Proxy135;을 작성하는 것입니다 및 프록시는
  3. 인터페이스 만 캐스팅 할 수 있기 때문에이 작품

가능한 한 많은 수의 인터페이스를 사용하여 구체적인 클래스 사용을 피하십시오.

링크 된 질문에 설명 된 구성을 혼합하는 경우 중독에서 here을 볼 수 있습니다.