1

ユーザーが商談のリストを選択する必要がある Visualforce ページを作成しています。ユーザーが前のボタンをクリックするとページネーションが実装され、リスト パネルが再びレンダリングされ、呼び出しでリストの値が変更されました。

<apex:pageBlockTable value="{!numbers}" var="n" align="center">
    <apex:column >
        <apex:inputCheckbox value="{!n.checked}"/>
    </apex:column> 
    <apex:column value="{!n.cat.Id}" />
    <apex:column value="{!n.cat.Name}" />
    <apex:facet name="footer">Showing Page # {!pageNumber} of {!totalPages}</apex:facet>
</apex:pageBlockTable>

checkItem を維持するための OpportunityWrapper クラスがあります。

public class OpportunityWrapper {
    public Boolean checked { get; set; }
    public Opportunity cat { get; set; }

    public OpportunityWrapper(){
        cat = new Opportunity();
        checked = false;
    }

    public OpportunityWrapper(Opportunity c){
        cat = c;
        checked = false;
    }

    public OpportunityWrapper(Opportunity c, Boolean checked){
        cat = c;
        this.checked = checked ;
    }
}

カスタム コントローラで OpportunityWrapper のリストを取得するためのコード セグメントは次のとおりです。

public List<OpportunityWrapper> getNumbers() {
    opp = new List<OpportunityWrapper>();
    if ( selectedPage != '0' )
        counter = list_size*integer.valueOf(selectedPage)-list_size;

    //we have to catch query exceptions in case the list is greater than 2000 rows
    try {
        for ( Opportunity o : [SELECT Id,Name from Opportunity order by name 
               limit :list_size offset :counter] ) {
            if ( !oppId.contains(o.Id) ) 
                opp.add(new OpportunityWrapper(o));
            else
                opp.add(new OpportunityWrapper(o,true));               
        } 
    } catch ( QueryException e ) {
        ApexPages.addMessages(e);                   
        return null;
    }    
    return opp;
}

前のボタンが押されると、次のメソッドが呼び出されます

public PageReference Previous() {
    //user clicked previous button
    for ( OpportunityWrapper o : opp ) { 
        if ( o.checked &&  oppId.contains(o.cat.Id) )
            oppId.add(o.cat.Id); 
    }
    selectedPage = '0';
    counter -= list_size;
    return null ;
}

以下はカスタムクラスのパブリックメンバーです

private integer counter = 0;  //keeps track of the offset
private integer list_size = 5;
public integer total_size; 
List<OpportunityWrapper> opp ;
public List<OpportunityWrapper> oppwrapper = new List<OpportunityWrapper>(); //list of Opportunity wrapper shown in the page
public  Set<String> oppId = new Set<String>(); //set for maintaining which Id's are checked

私の目標は、機会ラッパーをチェックして次または前のリストに移動し、戻ったときにそのアイテムをチェックする必要がありますが、設定値を常に空にしていますが、選択値のリストをPrevious()メソッドのセットに保存している理由ですその表示セットは常に空ですか??

4

1 に答える 1

0

次のトピックで、2 つのソリューション (JS で実装されたソリューションと apex コントローラーで実装されたソリューション) を見つけることができます。

VisualForce の次のページでどのチェックボックスが選択されているかを調べる方法は?

于 2013-02-23T18:14:09.930 に答える