주석을 사용하는 것과 비교하여 페이지의 데이터를 초기화하기 위해 언제 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 “를 사용합니다.