AJAX 클라이언트 동작을 포함하는 구성 요소를 개발 중입니다. 동작은 구성 요소에 제공된 매개 변수 (예 : 렌더링 및 실행 대상)에 따라 다릅니다. 성능상의 이유로 Facelet 기반 복합 컴포넌트를 사용하여 컴포넌트를 구현하고 싶지 않습니다.JSF : ClientBehavior를 구성 요소에 추가 할 때
제 질문은 클라이언트 동작이 구성 요소에 추가 될 때입니다. encodeBegin()
메서드에서 addClientBehavior()
으로 전화하면 이 UIComponentBase.restoreBehaviorsState()
으로 수신됩니다. 생성시 동작을 추가하면 Ajax 요청이 작동하지만 매개 변수는 아직 사용할 수 없습니다. 제대로 작동을 추가 할 때 적절한 방법이나 이벤트가 있습니까?
mojarra 2.1.7을 사용합니다. 다음은 동적 아약스 물건없이 내 구성 요소에 대한 간단한 예입니다 : 어떤 도움
@FacesComponent(value="simpleTestLink")
public class SimpleTestLink extends HtmlCommandLink{
private Logger logger=LoggerFactory.getLogger(getClass());
private AjaxBehavior ajax;
enum PropertyKeys{aProp};
public SimpleTestLink() {
logger.debug("SimpleTestLink created");
// adding ajax here works, but no parameters available yet
ajax = new AjaxBehavior();
ajax.setExecute(Arrays.asList(new String[]{"@this"}));
ajax.setRender(Arrays.asList(new String[]{"@form"}));
addClientBehavior(getDefaultEventName(), ajax);
}
@Override
public void encodeBegin(FacesContext context) throws IOException {
logger.debug("encodeBegin num: " + getAttr());
// adding ajax here fails
super.encodeBegin(context);
}
@Override
public boolean getRendersChildren() {
return true;
}
@Override
public void encodeChildren(FacesContext context) throws IOException {
Object attr = getAttr();
HtmlOutputText outputText = new HtmlOutputText();
outputText.setValue("testlink["+ attr+"]\n");
outputText.encodeAll(context);
super.encodeChildren(context);
}
private Object getAttr() {
return getAttributes().get(PropertyKeys.aProp.name());
}
}
감사합니다, 예, '적절한 방법 또는 이벤트'PreRenderViewEvent라고