faceletを使用してカスタムajaxyコンポーネントを作成します。デフォルトのコンポーネントから模倣したい動作の1つは、idはオプションであり、渡されない場合はidが生成されるということです。問題は、私はどこかにそのIDが必要な場合ということですfaceletコンポーネントの自動生成ID
public class JsfSupport {
public String generateId(String id) {
if (id==null || "".equals(id){
return FacesContext.getCurrentInstance().getViewRoot().createUniqueId();
}
return id;
}
}
:私は支援方法を(だけでなくエル機能を使用することができます)を呼び出すのJBoss ELを使用し
<ui:composition ...>
<div class="myComponent" id="#{jsfSupport.generateId(id)}">
...
</div>
</ui:composition>
を:私はすでに、このようにそれを行うことができますコンポーネントの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>
しかし、それは動作しません。とにかくIDは再生され、私は2つの異なるIDを取得します。 これを行う理想的な方法は何ですか?
は、私はあなたがその生成された「ID」にアクセスする方法をについてお聞きすることができから:
あなたは一度だけ渡された式を評価し、返された値を保存します
<c:set>
タグの独自のバージョンを書くことができあなたは上記のAjaxコンポーネントをインクルード/使用していましたか?例:カスタムajaxコンポーネントを再レンダリングする必要がある場合は、どうしますか? – bchetty@bchettyあなたはできません。再レンダリングする必要がある場合は、IDを渡す必要があります。自動生成されたIDは、コンポーネントとの外部対話がない場合にのみ発生します。 –
速い応答に感謝します! :) – bchetty