[jsf-2] JSF backing bean 메소드에서 JSF 컴포넌트를 업데이트 할 수 있습니까?

JSF Backing bean이 페이지의 구성 요소를 업데이트하도록하는 방법이 있습니까? 업데이트 속성이있는 ajax 구성 요소를 사용하여 페이지의 구성 요소를 업데이트하려는 것이 아닙니다. JSF 백업 빈 메서드 내에서 업데이트를 트리거해야합니다. 페이지의 업데이트는이 메서드가 완료된 후 또는 완료되기 전에 발생할 수 있습니다. PrimeFaces를 사용하여 얻을 수있는 솔루션이있는 경우 PrimeFaces를 사용하고 있습니다.



답변

표준 JSF API를 사용하여 클라이언트 ID를 PartialViewContext#getRenderIds().

FacesContext.getCurrentInstance().getPartialViewContext().getRenderIds().add("foo:bar");

PrimeFaces 특정 API를 사용하여 PrimeFaces.Ajax#update().

PrimeFaces.current().ajax().update("foo:bar");

또는 아직 PrimeFaces 6.2 이상을 사용하지 않는 경우 RequestContext#update().

RequestContext.getCurrentInstance().update("foo:bar");

JSF 유틸리티 라이브러리 OmniFaces 를 사용하는 경우 Ajax#update().

Ajax.update("foo:bar");

방법에 관계없이 이러한 클라이언트 ID는 뷰 측에서 수행하는 것처럼 구분 문자가 접두사로 붙지 않은 절대 클라이언트 ID를 나타내야 NamingContainer합니다.


답변

또한 jsf 지원 빈 / 클래스에서 구성 요소를 업데이트하려고했습니다.

UI 구성 요소를 조작 한 후 다음을 수행해야합니다.

FacesContext.getCurrentInstance().getPartialViewContext().getRenderIds().add(componentToBeRerendered.getClientId())

(서버 측) componentId 대신 clientId를 사용하는 것이 중요합니다 !!


답변

RequestContext되어 사용되지 에서 Primefaces 6.2 . 이 버전에서 다음을 사용하십시오.

if (componentID != null && PrimeFaces.current().isAjaxRequest()) {
    PrimeFaces.current().ajax().update(componentID);
}

그리고 backbean에서 자바 스크립트 를 실행 하려면 다음과 같이 사용하십시오.

PrimeFaces.current().executeScript(jsCommand);

참고:


답변

조사 할 시간이 충분해야 모든 것이 가능합니다. 🙂

내가해야 할 일은 입력에있는 ui : repeat 및 표시 이름 및 기타 필드를 반복하는 사람들을 갖는 것과 같습니다. 그러나 필드 중 하나는 singleSelect-A이고 값에 따라 다른 입력을 업데이트합니다-B. ui : repeat조차 내가 넣은 id가 없으며 DOM 트리에 나타납니다.

<ui:repeat id="peopleRepeat"
value="#{myBean.people}"
var="person" varStatus="status">

html의 id는 다음과 같습니다.

myForm:peopleRepeat:0:personType
myForm:peopleRepeat:1:personType

보기에서보다 다음과 같은 방법이 있습니다.

<p:ajax event="change"
listener="#{myBean.onPersonTypeChange(person, status.index)}"/>

그리고 그 구현은 다음과 같은 빈에있었습니다.

String componentId = "myForm:peopleRepeat" + idx + "personType";
PrimeFaces.current().ajax().update(componentId);

그래서 이런 식으로 문제없이 빈에서 요소를 업데이트했습니다. PF 버전 6.2

행운과 행복한 코딩 🙂


답변