私は、JSFページがあります。h:dataTableにネストされた入力(たとえばh:inputText)がBeanモデルを更新しないのはなぜですか?
....
<form jsfc="h:form" action="">
<h:dataTable value="#{newMusician.strings}" var="preferredMusicGenre" id="musicGenresSelectTable">
<h:column>
<h:inputText value="#{preferredMusicGenre}" immediate="true"/>
</h:column>
</h:dataTable>
<p>
<input type="submit" jsfc="h:commandButton" value="Add" action="#{newMusician.saveNewMusician}"/>
</p>
</form>
....
と文字列のArrayListのを持っている管理対象Bean:
@ManagedBean
@ViewScoped
public class NewMusician {
private ArrayList<String> strings = new ArrayList<String>();
public NewMusician() {
strings.add("olo");
}
public ArrayList<String> getStrings() {
return strings;
}
public void saveNewMusician() {
.....
}
....
}
問題:私は私が見ることができるし、押しボタンの保存、saveNewMusicianで()メソッドでテキストを変更しますArrayListの "strings"には同じ古い値 "olo"が含まれていますが、入力フィールドに挿入されたものはありません。 h:selecOneMenuを使用する場合は同じ問題です。
文字列ではなく、文字列を集約して値を文字列に設定するオブジェクトの場合は、状況が変更されます。 は、だから私はいくつかのPOJOを使用してへのinputTextを変更します場合:
<h:inputText value="#{preferredMusicGenrePojo.string}" immediate="true"/>
すべてがOKになります。
質問: なぜ1レベルのゲッタ<h:inputText value="#{preferredMusicGenre}"/>
の使用は間違っていますが、2レベルのゲッターの使用は<h:inputText value="#{preferredMusicGenrePojo.text}"/>
がOkですか?
は答えをいただき、ありがとうございます。今の状況は私には明らかですが、実際にはそれは簡素化されています。オリジナルのケースはPOJOオブジェクトでした。 JSFは: " "これはカスタムコンバータを使用したコンバーターです。この事件で私を助けることができますか? –
MercurieVV
これは意味をなさない。私の答えの例に従って修正してください。 – BalusC
はい。しかし、私がJPAモデルを使っていて、そのエンティティをラップしたくないのであれば。 JSF Backing BeanでJPAモデルを結合するのは悪い習慣ですか? – MercurieVV