ajax를 사용하여 항목을 선택할 때 여러 요소를 변경하는 복합 구성 요소가 있습니다. 또한 Primefaces p : ajax 및 p : commandButton을 f : ajax 대신에 사용하면 차이가 있습니다.복합 구성 요소 내에서 업데이트/렌더링 매개 변수는 어떻게 찾습니까?
문제는 전체 구성 요소가 업데이트되도록 구성 요소에 사용할 업데이트 특성을 찾을 수 없다는 것입니다. 예를 들어, 다음 단추 :
<p:commandButton id="slGoUSA"
value="USA"
rendered="#{cc.USAButtonOn}"
actionListener="#{cc.doSetUSA}"
update="???" />
나는 시도 모두 다음과 그들 중 누구도 작동하지 :
update="#{cc.attrs.update}"
:
이 작업을 수행
update="@this"
update="@form"
update="#{cc.clientId}"
update=":#{cc.clientId}"
update="#{cc.clientId}:localID"
update=":#{cc.clientId}:localID"
유일한 있다는 것은 이것이다
그리고 클라이언트 페이지가 복합 구성 요소를 포함하는 일부 clientId를 전달합니다. 그러나 사용자가 구성 요소 호출에 업데이트 매개 변수를 포함하도록하고 싶지는 않습니다. 이 작업을 수행하는 편리한 방법이 있습니까?
업데이트
좋아, 내가 완전한 테스트 케이스를 보여 경우에 도움이 될 것 같아요. 나는이 같은 복합 구성 요소를 백업 할 UINamingContainer을 구현 :
/*
* Test code
*/
package com.myapp.app.component;
import java.io.Serializable;
import javax.faces.component.FacesComponent;
import javax.faces.component.UINamingContainer;
@FacesComponent(value="qctest")
public class Qctest extends UINamingContainer implements Serializable {
private enum StateKey { Counter }
public Qctest() { }
@Override
public String getFamily() { return "javax.faces.NamingContainer"; }
public Integer getCounter() {
Integer i = (Integer) getStateHelper().get(StateKey.Counter);
if (i == null) i = Integer.valueOf(1);
else i += 1;
getStateHelper().put(StateKey.Counter, i);
return i;
}
}
는 그 다음 cc의 정의는 다음과 같습니다
<!-- INTERFACE -->
<cc:interface componentType="qctest">
</cc:interface>
<!-- IMPLEMENTATION -->
<cc:implementation>
<h:outputText id="outText" value="Counter is now: #{cc.counter}" />
<br/>
<p:commandButton value="Hit Me" update=":#{cc.clientId}" />
<br/>
<h:commandButton value="Or Hit Me" >
<f:ajax render=":#{cc.clientId}"/>
</h:commandButton>
</cc:implementation>
</html>
이 코드는 기본적으로 처음 AJAX 페이지 사상 OMG입니다! 일반 백킹 빈이있는 일반 페이지 대신 컴포지트 구성 요소 안에 있다는 점을 제외하고는 응용 프로그램과 다릅니다.
업데이트를 수행하는 데는 두 가지 버튼 모두 성공하지 못합니다. Firebug는 XHR이 보내지는 것을 보여 주지만 응답으로 카운터를 업데이트하지는 않습니다. 또는 에 대한 다른 값은 모두입니다. 이 날 것으로 보인다
malformedXML: During update: test2form:xyz not found
은 내부 AJAX의 가장 사소한 사용할 수 : 표시된 경우, primefaces 버튼을 말한다 나는 대화 상자를 얻을 JSF 명령 단추의 경우, 아무것도하지 않는 것 같다 컴포지트 구성 요소. 아무도 무슨 일이 일어날 수 설명 할 수 있습니까?
흠, 대신에 h : commandButton>을 사용해 보셨습니까? –
BalusC
그건 내 목록에있다. 그러나 렌더링 속성에 clinetId 형식을 사용 하시겠습니까? @BalusC – AlanObject
모든 것을