Мы используем Facelets для создания некоторых пользовательских компонентов AJAX. Одним из вариантов поведения, которое мы хотели бы имитировать из компонентов по умолчанию, является то, что идентификатор является необязательным, и идентификатор генерируется, если он не передается. Я уже могу сделать это так:
<ui:composition ...>
<div class="myComponent" id="#{jsfSupport.generateId(id)}">
...
</div>
</ui:composition>
Я использую JBoss el для вызова метода поддержки (также можно использовать функции el):
public class JsfSupport {
public String generateId(String id) {
if (id==null || "".equals(id){
return FacesContext.getCurrentInstance().getViewRoot().createUniqueId();
}
return id;
}
}
Проблема в том, что если мне нужен этот идентификатор где-то в моем коде JavaScript в компоненте, мне нужно получить его снова. Поэтому я подумал, что могу сделать следующее:
<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>
Но это не работает. Идентификатор восстанавливается в любом случае, и я получаю два разных.
Любые идеи о том, что было бы идеальным способом сделать это?