Programing

페이지로드시 JSF 관리 Bean 조치 호출

lottogame 2020. 12. 30. 07:38
반응형

페이지로드시 JSF 관리 Bean 조치 호출


페이지가로드 될 때 JSF 관리 Bean 조치를 실행하는 방법이 있습니까?

관련이 있다면 현재 JSF 1.2를 사용하고 있습니다.


JSF 1.0 / 1.1

JSF 페이지와 연관된 요청 범위 Bean의 생성자에 원하는 로직을 넣으십시오.

public Bean() {
    // Do your stuff here.
}

JSF 1.2 / 2.x

@PostConstruct요청에 어노테이션이있는 메소드를 사용 하거나 범위가 지정된 Bean을보십시오. 모든 관리 속성 및 주입 된 종속성의 생성 초기화 / 설정 후에 실행됩니다 .

@PostConstruct
public void init() {
    // Do your stuff here.
}

생성자가 예상 한 시간에 호출되지 않을 수 있으므로 CDI와 같은 프록시를 사용하는 빈 관리 프레임 워크를 사용하는 경우 생성자보다 강력하게 권장됩니다.

JSF 2.0 / 2.1

또는 <f:event type="preRenderView">기준으로 초기화하려는 경우 <f:viewParam>또는 Bean이 뷰 범위보다 더 넓은 범위에 놓일 때 사용하십시오 (이는 디자인 문제를 나타내지 만 제쳐두고 있음). 그렇지 않으면 a @PostConstruct도 완벽합니다.

<f:metadata>
    <f:viewParam name="foo" value="#{bean.foo}" />
    <f:event type="preRenderView" listener="#{bean.onload}" />
</f:metadata>
public void onload() { 
    // Do your stuff here.
}

JSF 2.2 이상

또는 <f:viewAction>기준으로 초기화하려는 경우 <f:viewParam>또는 Bean이 뷰 범위보다 더 넓은 범위에 놓일 때 사용하십시오 (이는 디자인 문제를 나타내지 만 제쳐두고 있음). 그렇지 않으면 a @PostConstruct도 완벽합니다.

<f:metadata>
    <f:viewParam name="foo" value="#{bean.foo}" />
    <f:viewAction action="#{bean.onload}" />
</f:metadata>
public void onload() { 
    // Do your stuff here.
}

String필요한 경우 탐색 케이스를 반환 할 수 있습니다 . 리디렉션으로 해석됩니다 ( ?faces-redirect=true여기서는 필요하지 않음 ).

public String onload() { 
    // Do your stuff here.
    // ...
    return "some.xhtml";
}

또한보십시오:


또 다른 쉬운 방법은 뷰가 렌더링되기 전에 메서드를 실행하는 것입니다. sessionScope의 경우 postConstruct가 매 세션마다 한 번만 실행되기 때문에 이것은 postConstruct보다 낫습니다. 페이지가로드 될 때마다 실행됩니다. 이것은 JSF 1.2가 아닌 JSF 2.0에만 해당됩니다.

이것이 방법입니다.

<html xmlns:f="http://java.sun.com/jsf/core">
      <f:metadata>
          <f:event type="preRenderView" listener="#{myController.onPageLoad}"/>
      </f:metadata>
</html>

그리고 myController.java에서

 public void onPageLoad(){
    // Do something
 }

편집-이 페이지의 질문에 대한 해결책은 아니지만 더 높은 버전의 JSF를 사용하는 사람들을 위해 이것을 추가합니다.

JSF 2.2에는 viewAction.

<f:metadata>
    <f:viewAction action="#{myController.onPageLoad}" />
</f:metadata>

@PostConstruct는 Bean이 생성 될 때 처음에 한 번 실행됩니다. 해결책은 Unused 속성을 만들고이 속성의 Getter 메서드에서 작업을 수행하고 다음과 같이 .xhtml 파일에이 속성을 추가하는 것입니다.

<h:inputHidden  value="#{loginBean.loginStatus}"/>

그리고 당신의 콩 코드에서 :

public void setLoginStatus(String loginStatus) {
    this.loginStatus = loginStatus;
}

public String getLoginStatus()  {
    // Do your stuff here.
    return loginStatus;
}

calling bean action from a will be a good idea,keep attribute autoRun="true" example below

<p:remoteCommand autoRun="true" name="myRemoteCommand" action="#{bean.action}" partialSubmit="true" update=":form" />

ReferenceURL : https://stackoverflow.com/questions/2451154/invoke-jsf-managed-bean-action-on-page-load

반응형