우리는 facelets을 사용하여 사용자 정의 ajaxy 구성 요소를 만듭니다. 기본 구성 요소에서 모방하려는 동작 중 하나는 id가 선택적이며 id가 전달되지 않으면 id가 생성된다는 것입니다. 나는 이미이 맘에 수행 할 수 있습니다facelets 구성 요소의 자동 생성 ID
<ui:composition ...>
<div class="myComponent" id="#{jsfSupport.generateId(id)}">
...
</div>
</ui:composition>
을 나는 보스 엘이 지원 메소드를 호출 (뿐만 아니라 엘 기능을 사용할 수 있습니다) 사용
public class JsfSupport {
public String generateId(String id) {
if (id==null || "".equals(id){
return FacesContext.getCurrentInstance().getViewRoot().createUniqueId();
}
return id;
}
}
문제는 그 어디 선가 그 ID를 필요로하는 경우 구성 요소의 자바 스크립트 코드에서 다시 검색해야합니다. 그래서 나는 다음과 같이 할 수 있다고 생각했다 :
<ui:composition ...>
<c:set var="id" value="#{jsfSupport.generateId(id)}" />
<div class="myComponent" id="#{id}">
...
</div>
<script type="text/javascript">
document.getElementById('#{id}');
</script>
</ui:composition>
그러나 그것은 작동하지 않는다. 어쨌든 ID는 재생성되고 두 개의 다른 ID를 얻습니다. 이 작업을 수행하는 가장 이상적인 방법은 무엇입니까?
나는 당신이 생성 된 "ID"에 접근 할 방법에 대해 물어 수에서 :
한 번만 전달 된 표현식을 평가하고 반환 값을 절약 할 수
<c:set>
태그의 자신의 버전을 쓸 수 페이지에서 위의 Ajax 구성 요소를 포함/사용 했습니까? 예 : 사용자 정의 Ajax 구성 요소를 다시 렌더링해야하는 경우 어떻게 수행할까요? – bchetty@bchetty 당신은 할 수 없습니다. 다시 작성해야하는 경우 ID를 전달해야합니다. 자동 생성 된 ID는 구성 요소와 외부 상호 작용이없는 경우에만 해당됩니다. –
빠른 응답을 보내 주셔서 감사합니다! :) – bchetty