2

各セルがクリック可能なデータテーブルを作成したいと思います。おそらく各セルを埋めることができapex:outputlink、クリック可能な部分を処理し、クリックごとにコントローラーを呼び出すことができると想定しています。答えが必要な大きな問題は、実際にクリックされたセル (つまり、どの行とどの列) に関する情報をどのように頂点コントローラーに渡すかということです。

これについての助けは大歓迎です。

4

1 に答える 1

2

それは簡単です。dataTableから値を取得するアクション関数を定義するだけです。

1)最初にコントローラーに渡す3つの変数を定義します:raw-id、cell-value、cell-type

public String clickedRowId { get; set; } 
public String clickedCellValue { get; set; } 
public String clickedCellType { get; set; } 

public PageReference readCellMethod(){
    System.debug('#### clickedRowId: ' + clickedRowId);
    System.debug('#### clickedCellValue: ' + clickedCellValue);
    System.debug('#### clickedCellType: ' + clickedCellType);
    return null;
}

2)次に、apexメソッドを呼び出して3つの変数を渡すアクション関数を作成します。

<apex:actionFunction name="readCell" action="{!readCellMethod}">
    <apex:param name="P1" value="" assignTo="{!clickedRowId}"/>
    <apex:param name="P2" value="" assignTo="{!clickedCellValue}"/>
    <apex:param name="P3" value="" assignTo="{!clickedCellType}"/>
</apex:actionFunction>

3)3番目に、各セルにonClickリスナーがあるdataTableを作成します。

<apex:pageBlockTable value="{!someArray}" var="item">

    <apex:column value="{!item.name}" onclick="readCell('{!item.id}','{!item.name}','name')" />
    <apex:column value="{!item.CustomField1__c}" onclick="readCell('{!item.id}','{!item.CustomField1__c}','custom1')" />
    <apex:column value="{!item.CustomField2__c}" onclick="readCell('{!item.id}','{!item.CustomField2__c}','custom2')" />

</apex:pageBlockTable>

他のJavaScript関数と同じようにactionFunctionにアクセスできます。ユーザーがセルをクリックすると、3つの変数がactionFunctionに送信され、次にコントローラーに送信されます。

于 2012-08-14T08:36:47.307 に答える