0

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」が表示されます。最後に、ページを更新すると、選択した正しい説明値が取得されます。

ヒントはありますか?

ありがとう

4

1 に答える 1

1

Primefaces 3.5 にはこのバグがあり、明らかにこの問題http://code.google.com/p/primefaces/issues/detail?id=6116で提出され、Elite バージョンでのみ利用可能なバージョン 3.5.15 で解決されました。バージョン 4.0 ではこれが修正されているようです。

私は、データテーブルを囲むフォームを再レンダリングすることを含む 3.5 の回避策を見つけました。あなたがする必要があるのは、次のようなフォームのレンダリングをトリガーするselectOneMenuコンポーネント内でajaxイベントリスナーを使用することです:

<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}" />
        <f:ajax listener="#{bean.submit}" render="@form" />
        </h:selectOneMenu>
    </f:facet>
</p:cellEditor>
于 2014-01-30T16:52:37.217 に答える