JSFツリーでコンポーネントを検索する際に問題があります。私は次のテンプレートがあるとします。JSFツリーのa4j:repeatタグにネストされたn番目のコンポーネントの検索
xmlns:a4j="http://richfaces.org/a4j"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:s="http://jboss.com/products/seam/taglib"
あなたが見ることができるように、a4j:repeat
タグがあるので、ページ上ののnレンダリング選択入力があることができます:
<a4j:form id="someForm">
<a4j:outputPanel id="somePanel">
<a4j:repeat id="people" value="#{bean.people}" rowKeyVar="_row" var="_data" stateVar="_state">
<s:decorate id="personPanel" template="edit.xhtml">
<h:outputLabel for="personAge" value="Choose your age:" />
<h:selectOneMenu id="personAge" value="#{_data.age}">
<s:selectItems var="_item" value="#{ageValues}" label="#{_item.description}" />
</h:selectOneMenu>
</s:decorate>
</a4j:repeat>
</a4j:outputPanel>
</a4j:form>
名前空間は以下のように定義されています。サーバー側のJSFツリーでn番目のコンポーネントを検索するにはどうすればよいですか?クライアント側では、コンポーネントはsomeForm:somePanel:0:personPanel:personAge
のようにレンダリングされます。私はこのようにコンポーネントを見つけようとしています:
UIViewRoot root = FacesContext.getCurrentInstance().getViewRoot();
UIInput ageInput = (UIInput) root.findComponent("someForm:somePanel:0:personPanel:personAge");
それは見つけることができませんでした。私は木をチェックしましたが、そのIDのコンポーネントが存在しないようです。
このコンポーネントはどのように入手できますか?それを達成する方法はありますか?
編集:私はいくつかの回避策を見つけた
。実際には、コンポーネントは必要ありませんでしたが、その価値はありました。値は要求からその名前で取り出すことができます。次のコード:
FacesContext facesContext = FacesContext.getCurrentInstance();
String ageValue = facesContext.getExternalContext().getRequestParameterMap().get("someForm:somePanel:0:personPanel:personAge");
作業をしました。
'a:'としてマップしたタグライブラリ(xml名前空間)はどれですか? – meriton
投稿を更新しました。それはxmlns:a = "http://richfaces.org/a4j。 –