You need to sign in to do that
Don't have an account?

Command button execution not happening for the second time
Hi,
I have a search button in my visual force page. When a dropdown value is selected and clicked on search button, query will be executed and results are displayed. But for the second time dropdown value is changed and search button is clicked, the result set is not getting changed. Whatever is returned in the first click action is only getting displayed.
Can anyone please clarify on this thing.
Thanks,
Santhi.
Can you post your code?
VFPAGE:
<apex:page StandardController="User" Extensions="UserData" tabstyle="User" sidebar="false">
<apex:form >
<apex:pageBlock title="Select Users" id="USERSLIST" mode="edit">
<h1>Update Sales Co-ordinator for the users in Particular Region</h1>
<br></br>
<br></br>
Select Region of the user:
<apex:inputField id="startMode" value="{!User.Region__c}" />
<br></br>
<!--THIS SEARCH BUTTON IS NTO GETTING EXECUTED FOR THE SECOND TIME-->
<apex:commandButton action="{!doSearch}" value="Search"/> <br></br>
<apex:pageBlockTable value="{!results}" var="t" id="table">
<apex:column >
<apex:inputCheckbox value="{!User.ManagerId}" id="checkedone">
</apex:inputCheckbox>
</apex:column>
<apex:column value="{!t.Name}"/>
<apex:column value="{!t.Email}"/>
<apex:column value="{!t.Region__c}"/>
<apex:column value="{!t.Manager__c}"/>
</apex:pageBlockTable>
</apex:pageblock>
</apex:form>
</apex:page>
CONTROLLER:
public class UserData {
List<Userwrapper> userList {get;set;}
PUBLIC String usr{get;set;}
PUBLIC List<selectOption> usrs;
List<User> results=new List<User>();
List<User> results1=new List<User>();
public User user;
public UserData(ApexPages.StandardController controller)
{
this.user = (User)controller.getrecord();
}
public Pagereference doSearch()
{
results = [select Name,Region__c,Email,LanguageLocaleKey,Manager__c from User Where Region__c =:User.Region__c];
system.debug('USERSLISTFOR REGION$$$$'+results);
return null;
}
public List<Userwrapper> XXX()
{
if(userList == null) {
userList = new List<Userwrapper>();
for(User u:results1)
{
userList.add(new Userwrapper(u));
}
system.debug('****ADDEDUSERS****'+userlist);
}
return userList;
}
Public PageReference getSelected()
{
system.debug('ENTERED INTO SELECTED');
List<User> selectedUsers = new List<User>();
for(userwrapper usrwrapper : XXX())
{
if(usrwrapper.selected == true)
{
selectedusers.add(usrwrapper.wuser);
}
}
system.debug('@@@SELECTEDUSERs@@@:'+selectedusers);
return null;
}
Public Pagereference UpdateManager()
{
return null;
}
public List<User> getResults()
{
return results;
}
}
Do you see the debug in the action method - i.e. does the method get called, but the results don't change?
Actually, I think I've seen something like this before. I seem to recall that if I created a reference to the record from the standard controller, that seemed to become decoupled when the value on the page changed. Essentially I had a snapshot.
I ended up changing my code to the following:
Hi,
Thanks for the reply.
But unfortunately, still the page is not getting refreshed.
Updated the code. Pls check.
VFPAGE:
<apex:page StandardController="User" Extensions="UserData" tabstyle="User" sidebar="false">
<apex:form >
<apex:pageBlock title="Select Users" id="USERSLIST" mode="edit">
<h1>Update Sales Co-ordinator for the users in Particular Region</h1>
<br></br>
<br></br>
Select Region of the user:
<apex:outputLabel value="Select Region: " for="viewlist" />
<apex:inputField id="startMode" value="{!User.Region__c}">
<apex:actionsupport event="onchange" immediate="false" action="{!doSearch}" rerender="theTable" />
</apex:inputfield><br></br><br></br>
<br></br>
<apex:pageBlockTable value="{!results}" var="t" id="theTable">
<apex:column >
<apex:inputCheckbox value="{!User.ManagerId}" id="checkedone">
</apex:inputCheckbox>
</apex:column>
<apex:column value="{!t.Name}"/>
<apex:column value="{!t.Email}"/>
<apex:column value="{!t.Region__c}"/>
<apex:column value="{!t.Manager__c}"/>
</apex:pageBlockTable>
</apex:pageblock>
</apex:form>
</apex:page>
Controller:
public class UserData {
List<Userwrapper> userList {get;set;}
PUBLIC String usr{get;set;}
List<User> results=new List<User>();
public User user;
public ApexPages.StandardController stdCtrl;
public UserData(ApexPages.StandardController controller)
{
//this.user = (User)controller.getrecord();
stdCtrl=controller;
}
public Pagereference doSearch()
{
//results = [select Name,Region__c,Email,LanguageLocaleKey,Manager__c from User Where Region__c =:User.Region__c];
User u=(User)stdCtrl.getrecord();
results = [select Name,Region__c,Email,LanguageLocaleKey,Manager__c from User Where Region__c =:u.Region__c];
system.debug('USERSLISTFOR REGION$$$$'+results);
return null;
}
public List<Userwrapper> XXX()
{
if(userList == null) {
userList = new List<Userwrapper>();
for(User u:results)
{
userList.add(new Userwrapper(u));
}
system.debug('****ADDEDUSERS****'+userlist);
}
return userList;
}
Public PageReference getSelected()
{
// String id=ApexPages.CurrentPage().getParameters().get('id');
system.debug('ENTERED INTO SELECTED');
List<User> selectedUsers = new List<User>();
for(userwrapper usrwrapper : XXX())
{
if(usrwrapper.selected == true)
{
selectedusers.add(usrwrapper.wuser);
}
}
system.debug('@@@SELECTEDUSERs@@@:'+selectedusers);
return null;
}
Public Pagereference UpdateManager()
{
return null;
}
public List<User> getResults()
{
return results;
}
}
You can try adding some page messages for debugging.
Hi
Try by adding immediate is true . and let me know wheather it works or not
<apex:actionsupport event="onchange" immediate="true" action="{!doSearch}" rerender="theTable" />
Did this post answers your question if so please mark it solved
Thanks
asish
immediate=true will discard any changes that the user has made, so that won't help.
What do you see if you add some debug to the doSearch method to dump out the u:Region__c value?