2013-12-09 7 views
3

JSF 2.1/Java EE 응용 프로그램을 모듈화하고 싶습니다. 여러 모듈로 구성된 페이지가 있습니다. 각 모듈은 별도의 JSF 백업 빈을 사용해야합니다. 이 모듈 중 일부는 동일한 엔티티에서 /에 대한 일부 데이터를 표시하고 변경해야합니다.JSF 백킹 빈간에 엔티티를 공유하는 방법은 무엇입니까?

나는 이미 몇 가지 접근법을 시도했지만 지금까지는 만족스럽지 않습니다. 나는이 일을하는 가장 좋은 방법이 무엇인지 스스로에게 묻는다.

모든 모듈은 동일한 엔티티를 사용하며 일부 데이터가 변경된 경우 다른 백킹 빈에 알릴 필요가 있습니다 (아마).

  • 이 인터페이스를 통해 내 구성 요소 (XHTML)로 개체를 전달하면 백업 빈에 전달뿐만 아니라
  • 의 실체를로드하지 않습니다 : 이미 해봤 몇 가지 방법에

    댓글 bean의 postContruct 메소드는 요청 매개 변수에서 id를 읽음으로써 일반적으로 "viewParam"접근법을 사용하는 것이 바람직하지 않습니다.

  • "viewParam"을 사용하면 IMHO가 bean 작성 후 엔티티 (예 : postConstruct)를 가지고있는 것처럼 좋지 않습니다. 빈의 설정자가 언제 호출되는지는 잘 모르겠습니다. 그것은, 내가 뭔가 내 JSF-2.2 백업 콩에서 다음 방법 중 하나를 사용하고 (?에 의해 누구) "일반적으로 낙담"임에도 불구하고
+0

세션에서 엔티티 개체를 저장하고 모든 빈에서 사용하는 것이 좋을 이유가 없습니다. – Adarsh

+0

나는 세션을 팽창시키고 싶지 않다. 나는 JSF 프레임 워크에 더 잘 맞는 솔루션을 찾고있다. 세션에 무언가를 저장하는 것이 임시 해결책처럼 들립니다. –

+0

확실히'@ SessionScoped' /'@ ApplicationScoped' 관리 빈이 필요합니다. 콩에 대한 통지, 당신은 더 구체적인해야합니다. –

답변

0

(내가 뭔가 다른 personId 필요 여부에 따라) :

우수한 CDI 지원 Omnifaces을 사용합니다. 그렇다면 merge()을 사용하여 엔티티를 업데이트하십시오. 그러나이 경우 하나의 엔티티 만 엔티티에 대한 변경 사항을 저장하므로 YMMV가 변경됩니다. 콩이 그들 사이 업데이트 또는 단체의 작품을 통신 할 필요가있을 때, 나는 보통 이벤트가 생성자 인수로 개체를 가져옵니다 javax.enterprise.Event 초 동안 이동 :

public class BeanSending { 
    @Inject 
    private Event<PersonCreated> personCreatedEvent; 

    public void constructPerson() { 
     Person person = makePerson(); 
     personCreatedEvent.fire(new PersonCreated(person)); 
    } 
} 

public class BeanUpdater { 
    public void updatePerson(@Observes PersonCreated evt) { 
     doStuffWithPerson(evt.getPerson()); 
    } 
} 
+0

FacesContext에서 요청 매개 변수를 직접 읽는 데 "낙심"했습니다. @Param을 사용하여 속성을 주입하는 솔루션을 언급하지 않습니다. –

+0

@ChristopherCudennec 예,하지만'@ Param'은 (매우 솔직한) 설탕입니다. 원칙은 모든 bean이 매개 변수 이름 집합에 동의하므로 동일한 엔티티를 작업 할 수 있습니다. – mabi

+0

니스. 나는 그 값이 빈에 주입되는 것을 좋아한다. 반면에 bean은 매개 변수의 이름을 알고 있습니다. –

0

내가 무엇을 당신이 필요로하는 것은 CDI 생각 - Context & Dependency Injection. 페이지를 여러 개의 작은 CDI 빈으로 썰어서 필요에 따라 서로 주입하십시오.

+0

페이지 관리가 내 질문에 관심이있는 부분이 아닙니다. 내 모든 뒷받침 콩은 이미 주입 할 수있는 CDI 빈입니다. 엔티티 공유에 관심이 있습니다.엔티티가 데이터베이스에서 얻은 고객이라고 가정 해 보겠습니다. –

+0

@ChristopherCudennec : 이미 CDI 빈을 사용하고 있다면 빈 X 중 하나에 고객을 삽입 한 다음 해당 빈 X를 다른 빈에 주입하여 동일한 고객을 공유하십시오. –

+0

나는 이미 그것을 시도했다. 나는 콩이 자율적 인 것, 즉 서로를 알지 못하도록하는 것을 선호한다. –