I have a custom controller with a variable 'count.' I want this to update on the page every time the account list updates. Right now it's static. It just displays the original number of records in the list. How do I make it dynamically update on the page?

public class AccountSearchController{
  private String soql {get;set;}
  public List<Account> Accounts {get;set;}  
    public integer count{
            count = Accounts.size();
            return count;

  public AccountSearchController() {

    soql = 'select Name,BillingState,Rollout_Group__c,Rollout_Status__c,SD_RD__c,Business_Launch_Date__c,Franchise_Email__c,X800_Number__c,Franchise_ID__c from Account where Status__c = \'Active\'';
    count = Accounts.size();

  public void runQuery() {

    try {
      Accounts = Database.query(soql + ' order by ' + sortField + ' ' + sortDir + ' limit 20');
    } catch (Exception e) {
      ApexPages.addMessage(new ApexPages.Message(ApexPages.Severity.ERROR, 'Ooops!'));

Visualforce Page:

<apex:pageBlockTable value="{!Count}" var="c">

Since this property is derived, you don't need a setter, and you don't need to perform an assignment in your getter at all. Just do

public Integer count {
    get {
        return Accounts.size();

Your Visualforce page should not compile, because count is not a list of objects to iterate over in the <apex:pageBlockTable>.

To answer your underlying question, though, you need to ensure that whenever your Visualforce page initiates the method runQuery(), that a partial page rerender is performed that includes the region where your count is displayed. This can often be achieved by wrapping the area in an <apex:outputPanel> component with an id, and targeting that id with a rerender attribute on the <apex:commandButton> or other element that initiates the server call. You have not shown enough of your Visualforce page to be more specific.

| improve this answer | |

Not the answer you're looking for? Browse other questions tagged or ask your own question.