JSF Backing bean이 페이지의 구성 요소를 업데이트하도록하는 방법이 있습니까? 업데이트 속성이있는 ajax 구성 요소를 사용하여 페이지의 구성 요소를 업데이트하려는 것이 아닙니다. JSF 백업 빈 메서드 내에서 업데이트를 트리거해야합니다. 페이지의 업데이트는이 메서드가 완료된 후 또는 완료되기 전에 발생할 수 있습니다. PrimeFaces를 사용하여 얻을 수있는 솔루션이있는 경우 PrimeFaces를 사용하고 있습니다.
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
합니다.
<f:ajax listener>
또는에 의해 메소드 호출<f:event type="preRenderView" listener>
<f:ajax>
. 이것은 JSF 2.0부터 도입되었습니다. JSF 1.2 구성 요소 라이브러리 특정 기능에 의지해야합니다.
또한 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
행운과 행복한 코딩 :)
personType
경우 사람과 인덱스를 모두 ajax 리스너에 전달하는 것은 불필요합니다. 이벤트에서 ID와 값을 모두 가져올 수 있습니다. 그러나 솔루션이 특정 사용 사례에 필요한 것일 수 있지만 완전한 예제가 없기 때문에 ( 최소한의 재현 가능한 예제 풍미로) 말하기가 어렵습니다.