0

私は Primefaces 3.4 と Groovy を使用しています。私はオブジェクトを作成PartしましたAttachment

class Part {
    Attachment selectedAttachment
    List<Attachment> attachments = []

    AttachmentDataModel getAttachmentModel() {
        return new AttachmentDataModel(attachments)
    }
}

class Attachment {
    String fileName
    String fileType
    String description
}  

私のビューは次のように DataTables をネストしています:

<p:dataTable value="#{mybean.parts}" var="part" rendered="#{mybean.attachmentsFound}">
    <p:column>
        <p:dataTable 
            var="attachment"
            selectionMode="single"
            value="#{part.attachmentModel}"
            selection="#{part.selectedAttachment}"
            >
            <p:column headerText="File Name">
                #{attachment.fileName}
            </p:column>
            <p:column headerText="File Description" style="width: 200px">
                #{attachment.description}
            </p:column>
            <p:column headerText="File Type" style="width: 20px">
                #{attachment.fileType}
            </p:column>
        </p:dataTable>
    </p:column>
</p:dataTable>

パーツごとに1つのアタッチメントを選択できるようにしたい。

問題:最初の部分だけが最後に選択された添付ファイル selectedAttachmentに設定されます!

質問:各部品インスタンスが選択した添付ファイルを保存できるようにするにはどうすればよいですか? 御時間ありがとうございます。

注: 自分の AttachmentDataModel をデバッグgetRowDataすると、選択した数だけヒットが表示されます。

4

1 に答える 1

1

私はまだ答えを探していますが、回避策を見つけました。ビューを次のように変更しました。

<p:dataTable value="#{mybean.parts}" var="part" rendered="#{mybean.attachmentsFound}">
    <p:column>
        <p:dataTable 
            var="attachment"
            selectionMode="single"
            value="#{part.attachmentModel}"
            selection="#{part.selectedAttachment}"
            >
            <!-- WORKAROUND -->
            <p:ajax event="rowSelect" listener="#{mybean.onRowSelect}" />
            <p:ajax event="rowUnselect" listener="#{mybean.onRowUnselect}" />
            <!-- /WORKAROUND -->
            <p:column headerText="File Name">
                #{attachment.fileName}
            </p:column>
            <p:column headerText="File Description" style="width: 200px">
                #{attachment.description}
            </p:column>
            <p:column headerText="File Type" style="width: 20px">
                #{attachment.fileType}
            </p:column>
        </p:dataTable>
    </p:column>
</p:dataTable>

次に、バッキング Bean (mybean) でonRowSelect/onRowUnselect、マップから選択を追加/削除するように実装しました。添付ファイルの ID がキーで、添付ファイルが値です。

于 2012-11-02T14:28:31.490 に答える