私はこの問題がSOのどこか他の場所に存在することを知っていますが、ソリューションが古い(JSFが多く改善されているようです)か、コンボの値に基づいて入力を変更してください
簡単なことですが、私はコンボボックスの値に基づいて入力要素のテキストを置き換えたいと思います。私はAjaxを使いたいと思います。コンボに要素が1つしかない場合でも、この機能を有効にしたいと思います(デフォルトでコンボの選択が空であれば問題ありません)。
<h:selectOneMenu id="fnamecombo" valueChangeListener="#{namesController.setForename(fnamecombo)}">
<c:forEach items="#{namesController.myForenames}" var="myforename">
<f:selectItem itemValue="#{myforename}" itemLabel="#{myforename}" />
</c:forEach>
<f:ajax render="fnameinput" />
</h:selectOneMenu>
<h:inputText value="#{namesController.forename}" id="fnameinput" />
これは機能しません。まず第一に、setForename
メソッドを呼び出す方法がわかりません。私がvalueChangeListener="#{namesController.setForename('xxxxx')}"
を使用すると、それは動作しますが、コンボに複数の要素がある場合は最初の時間とiffだけです。それ以外の場合、イベントは発生しないように見えます。
簡単な修正とは何ですか?
EDIT
[OK]をので、私は進歩を遂げています。私が予想以上に簡単だった:
<h:selectOneMenu id="fnamecombo" value="#{namesController.forename}">
<c:forEach items="#{namesController.myForenames}" var="myforename">
<f:selectItem itemValue="#{myforename}" itemLabel="#{myforename}" />
</c:forEach>
<f:ajax render="fnameinput" />
</h:selectOneMenu>
<h:inputText value="#{namesController.forename}" id="fnameinput" />
これは私が手ではなく、foreach
ループで印刷されたものの上に作成selectItem
に動作するようです。だから、これは私がループから「ジョン」を得て、私は手動で「例」を作成し、レンダリングコード、次のとおりです。
<select id="myForm:fnamecombo" name="myForm:fnamecombo" size="1" onchange="mojarra.ab(this,event,'valueChange',0,'myForm:fnameinput')">
<option value="example">example</option>
<option value="john">john</option>
</select>
それはジョン 'で「例」で動作しますが、ありません。
c:forEachの代わりにf:selectItemsを使うことができます –
申し訳ありませんが、私は理解できません。どういう意味ですか?そして、これがどうやって問題を解決するのか? – user1156544
OK、あなたが言ったことを理解しました。私はc:forEachをf:selectedItemsに変更しましたが、それでも値は取得されません。私はselectItemを手動で置く場合にのみ、それらと一緒に動作するようです。 f:selectedItemsを使用すると、入力フィールドのみが削除されます。生成されたコードはすべてのオプションで同じであるため、他に何か不足しているものがなければなりません – user1156544