[jsf] f : viewAction / preRenderView 대 PostConstruct를 언제 사용합니까?

주석을 사용하는 것과 비교하여 페이지의 데이터를 초기화하기 위해 언제 f:viewAction또는 preRenderView이벤트를 사용해야 @PostConstruct합니까? 기가 콩 등의 범위의 유형에 따라 둘 중 하나를 사용할 수있는 이론적 근거는 백업 콩이 경우인가 @RequestScoped, 다음 사용의 선택 것 f:viewAction또는 preRenderView이상 @PostConstruct보기를 렌더링하기 전에 백업 빈을 초기화 할 수는 관련성이없는 두 하듯이 같은 효과가 발생합니까?

f : viewAction 또는 preRenderView

<f:metadata>
  <f:viewAction action="#{myBean.initialize}" />
</f:metadata>
<f:metadata>
  <f:event type="preRenderView" listener="#{myBean.initialize}"/>
</f:metadata>

또는

안녕하세요.

public class MyBean
{
    @PostConstruct
    public void initialize()
    {

    }
}



답변

@PostConstruct 어노테이션을 사용하여 페이지 구절에 대한 데이터를 초기화하기 위해 f : viewAction 또는 preRenderView 이벤트를 언제 사용해야합니까?

<f:viewAction>HTML이 렌더링되기 전에 메소드를 실행하려는 경우 사용하십시오 . 이는 모델 값 <f:viewParam>업데이트 단계에서 설정 한 모델 값을 기반으로 작업을 수행하려는 경우 특히 유용합니다 . 즉, @PostConstruct실행 되는 순간에는 사용할 수 없습니다 . JSF 2.0 / 2.1에서는이 태그가 존재하지 않았으므로 preRenderView해결 방법 을 사용해야합니다 .

백킹 빈이 @RequestScoped이면 똑같은 일을 효과적으로 수행합니까? (그러면 개발자의 선택에 달려 있습니까? (@PostConstruct는 “더 깔끔한”것 같습니다)).

아니요, 그들은 확실히 똑같은 일을 효과적으로하지 않습니다. 는 @PostConstruct작업 수행들이 의도된다 직접 빈의 구조와 모든 주입 종속성 설정과 같은 관리를 등록 후 @EJB, @Inject, @ManagedProperty등, 즉, 주입 의존성 빈의 생성자 내부를 사용할 수 없습니다. 따라서 Bean이보기, 세션 또는 애플리케이션 범위 일 때보기, 세션 또는 애플리케이션 당 한 번만 실행됩니다. 은 <f:viewAction>단지 초기 GET 요청에 호출 기본적으로,하지만 통해 수 onPostback="true"속성이 아니라 다시 게시 요청을 호출하도록 구성 될 수있다. preRenderView이벤트는 모든 HTTP 요청에 호출된다 (예, 이것은 또한 아약스 요청을 포함!).

사용, 요약 @PostConstruct하면 주입 의존성에 의해 설정되는 관리 속성에 대한 작업을 수행 할 경우 @EJB, @Inject, @ManagedProperty콩의 건설 기간 동안, 등. 에서 설정 한 속성에 대해 작업을 수행하려는 <f:viewAction>경우 에도 사용 합니다 <f:viewParam>. 여전히 JSF 2.0 / 2.1을 사용 preRenderView하는 경우 <f:viewAction>. 필요한 경우 초기 요청시에만 작업 FacesContext#isPostback()을 수행하도록 체크를 추가 할 수 있습니다 preRenderView.

또한보십시오:


답변

관리 빈의 속성을 초기화해야합니까? -> 그런 다음 @ PostConstruct를 사용 하십시오.
그렇지 않으면 다른 뷰에서 전달 된 매개 변수로 작업해야합니까? -> 그런 다음 ” preRenderView “를 사용합니다.


답변