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
행운과 행복한 코딩 🙂