Ok, nếu bạn muốn xử lý nó bằng Javascript, hãy sử dụng phương thức của Pavel, nếu không, hãy sử dụng phương pháp sau để thực hiện điều đó thông qua bộ điều khiển. Bạn phải tạo một lớp bao bọc cho bất kỳ thứ gì bạn muốn theo dõi. Tôi không chắc nó hoạt động như thế nào, nhưng bằng cách nào đó nếu bạn đặt tên biến boolean "đã chọn" trong lớp trình bao bọc của bạn, nó sẽ được ánh xạ tới hộp kiểm.Dưới đây là các mã:
Vì vậy, trong trang lực lượng trực quan của bạn, làm:
<apex:dataTable value="{!Foos}" var="f">
<apex:column >
<apex:outputLabel value="{!f.foo.name}" /> <apex:inputCheckbox value="{!f.selected}" />
</apex:column>
</apex:dataTable>
<apex:commandButton action="{!getPage2}" value="go"/>
Trong điều khiển của bạn, làm như sau: 1) Thực hiện một lớp Wrapper với boolean "được chọn", mà bằng cách nào đó bản đồ đến inputCheckbox chọn:
public class wFoo {
public Foo__c foo {get; set}
public boolean selected {get; set;}
public wFoo(Foo__c foo) {
this.foo = foo;
selected = false; //If you want all checkboxes initially selected, set this to true
}
}
2) khai báo các biến danh sách
public List<wFoo> foos {get; set;}
public List<Foo__c> selectedFoos {get; set;}
3) Xác định accessor đăng ký vào Danh
public List<wFoo> getFoos() {
if (foos == null) {
foos = new List<wFoo>();
for (Foo__c foo : [select id, name from Foo__c]) {
foos.add(new wFoo(foo));
}
}
return foos;
}
4) Xác định phương pháp để xử lý các hộp kiểm chọn và đặt chúng trong một danh sách để sử dụng trên một trang
public void processSelectedFoos() {
selectedFoos = new List<Foo__c>();
for (wFoo foo : getFoos) {
if (foo.selected = true) {
selectedFoos.add(foo.foo); // This adds the wrapper wFoo's real Foo__c
}
}
}
5) Xác định phương pháp để trả lại PageReference cho trang tiếp theo khi nút gửi được nhấp vào
public PageReference getPage2() {
processSelectedFoos();
return Page.Page2;
}
Khái niệm và triển khai hoàn hảo! Cảm ơn @Pavel – highfive