Wir verwenden Facelets, um einige benutzerdefinierte Ajaxy-Komponenten zu erstellen. Eines der Verhaltensweisen, die wir von den Standardkomponenten nachahmen möchten, ist, dass eine id optional ist und eine id generiert wird, wenn sie nicht übergeben wird. Ich kann das bereits so machen:
<ui:composition ...>
<div class="myComponent" id="#{jsfSupport.generateId(id)}">
...
</div>
</ui:composition>
Ich verwende JBoss el, um eine Support-Methode aufzurufen (könnte auch el-Funktionen verwenden):
public class JsfSupport {
public String generateId(String id) {
if (id==null || "".equals(id){
return FacesContext.getCurrentInstance().getViewRoot().createUniqueId();
}
return id;
}
}
Das Problem ist, dass ich, wenn ich diese ID irgendwo in meinem Javascript-Code in der Komponente benötige, sie erneut abrufen muss. Also dachte ich, ich könnte das Folgende tun:
<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>
Aber das funktioniert nicht. Die ID wird trotzdem neu generiert und ich bekomme zwei verschiedene. Irgendwelche Ideen, was wäre der ideale Weg, dies zu tun?