primefaces セル編集テーブルを使用していくつかの問題に直面しています。したがって、編集可能な列を含むデータテーブルがあります。このデータテーブルは、jpa エンティティのリストを通じて入力されます。
問題に焦点を当てると、私の編集可能なセルには、出力ファセットに outputText があり、入力ファセットに selectOneMenu があり、列挙型によって入力されます。
私の問題は、データテーブルが最初に正しくロードされ、必要なフィールドを正常に編集でき、selectOneMenu に列挙型が正しく入力されていることです。selectOneMenu でオプションを選択するとうまくいきますが、(編集モードを終了するために) データテーブルの外側をクリックすると、コードが取得され、説明を取得する必要があるため、間違った値が取得されます。
私のコード:
列挙型:
public enum EnumSimNao implements DetalheDominioEnum {
/**
* Sim
*/
S("Sim"),
/**
* Não
*/
N("Não");
Enum には、一部のサービスに基づいて値を更新するゲッターがあります。これらの値は常にサービスから取得します。私はそれをテストしましたが、値はここにあります。説明と言うときは「Sim」または「Nao」を意味し、コードはそれぞれ「S」または「N」です。データベースから、jpa エンティティの @Enumerated 属性を介して enum に関連付けられたコードが取得されます。#{tp.respostaObrigatoria.description}
取得すると、返されたコードに基づいて「Sim」または「Não」が返されます。
public String getDescription() {
DetalheEstaticoDominioEnumHelper.INSTANCE.fillDescriptions(this);
return description == null ? defaultDescription : description;
}
@Override
public void setDescription(String description) {
this.description = description;
}
xhtml :
<p:cellEditor>
<f:facet name="output">
<h:outputText
value="#{tp.respostaObrigatoria.description}" />
</f:facet>
<f:facet name="input">
<h:selectOneMenu value="#{tp.respostaObrigatoria}">
<f:selectItems value="#{Factories.enumSimNao}" var="simNao"
itemLabel="#{simNao.description}" itemValue="#{simNao}" />
</h:selectOneMenu>
</f:facet>
</p:cellEditor>
tpは、バッキング Bean に由来するリストに由来するエンティティです。
そのため、セルを編集すると、両方の説明 (「Sim」または「Nao」) が表示されますが、編集モードを終了すると、「S」または「N」が表示されます。最後に、ページを更新すると、選択した正しい説明値が取得されます。
ヒントはありますか?
ありがとう