[SalesForce]チェックボックス付きのテーブルリストを作る

チェックボックスがついたテーブルのリストを
カスタマイズされた項目で作成してみた。

参考サイト:
[Visualforce] チェックボックスつきリストの実現(ページング機能つき) [技術情報]
チェックボックス付きリストの作り方

2つ目の参考サイトによると、

<apex:listViews>を使えばあっという間に作れてしまいますが、残念ながらそこでチェックされたレコードをサーバー側で取得することができません。

そうなので、任意のオブジェクトをラップしたクラスを作成してそのオブジェクトにチェックされた項目を保存することになる。
上記2つの参考サイトではページングなどで結構ややこしくなっているので、
なるべく簡易に、オブジェクトのラッパークラスを使うことだけに注目して作成してみた。

ちなみに、標準のAttachmentオブジェクトではリストを作成出来なかった。
(サポートしてない、的なエラーが出た)

標準オブジェクトでは確認していないので、カスタムオブジェクトでの方法を例に上げる。

オーバーライドするオブジェクト:HogeObject__c

オーバーライドしたクラス

public class  HogeObjectWrapper {

    public HogeObject__c Record {get; private set;}  //元のオブジェクト格納
    public Boolean selected {get; set;} //チェックボックス用
    public String hogeName {get; set;} //追加する項目(あれば)

    public HogeObjectWrapper(HogeObject__c record) {
        this.Record = record;
        this.selected = false; //デフォルト値
        this.hogeName = '';
    }
}

ページで指定しているapexクラスで使用する

public class hogePageController {
    public Lead lead { get; set; }

    public List<HogeObjectWrapper> HogeObjectSelects; //リスト格納用

    //コンストラクタ
    public hogePageController(ApexPages.StandardController controller) {
        //コンストラクタで表示するリストを取得しておく
        AttachmentObjectSelects= new List<SendmailAttachmentWrapper>();

        List<HogeObject__c> hogeLists = [SELECT Id, Name FROM HogeObject__c];
        for(HogeObject__c h:hogeLists){
            //ラッパークラスに代入する
            HogeObjectWrapper hObj = new HogeObjectWrapper(h);
            hObj.hogeName = '何かしらの名前';
            HogeObjectSelects.add(hObj);
        }
    }

    //ページからの参照用
    public List<HogeObjectWrapper> getHogeObjectSelects() {
        return HogeObjectSelects;
    }
}

VisualForceページ

<apex:pageBlock >
    <apex:pageBlockTable value="{!HogeObjectSelects}" var="h">
        <apex:column >
            <apex:facet name="header">チェックボックス</apex:facet>
            <apex:inputCheckbox value="{! a.selected }"/>
        </apex:column>
        <apex:column >
            <apex:facet name="header">オブジェクトのID</apex:facet>
            <apex:outputText value="{! h.Record.id }" />
        </apex:column>
        <apex:column >
            <apex:facet name="header">任意の名前</apex:facet>
            <apex:outputText value="{! h.hogeName }" />
        </apex:column>
    </apex:pageBlockTable>
</apex:pageBlock>

pageBlockTableを使用するには、pageBlockで囲まないといけない。
apex:pageBlockTable
apex:facetは、apex:column内で使用し、そのテーブル内の列の見出しとなる。
apex:facet
参考:[SFDC]一覧表にリンクを表示したい(ヘッダタイトルもつける)

これで、一番左の列にチェックボックスのついたテーブルが完成した。

チェックして送信した場合、HogeObjectSelectsselectedがtrueになる。
そこからデータを取得出来る。
forで回して、selectedがtrueになっている場合に何かしらをする、、というストーリーが想定される。

apexでの使用方法

for(HogeObjectWrapper h:HogeObjectSelects){
    if(h.selected){
        //tureの時、何かの処理をする
    }
}
   このエントリーをはてなブックマークに追加