You need to sign in to do that
Don't have an account?
Martha V
How to pass a table's row from Visualforce to a controller extension
I want to make a VF page that shows members of a campaign as well as has a searchfield to find contacts to add to the campaign. So the action for the search field will find all contacts that match and display them on a list. Then the user can select a contact and click on the name and that contact would be added to the campaign.
My problem is that I don't know how to implement that last bit. Since the list of contats is displayed with a pageBlockTable how does the controller know which contact was selected.
Here is my VF page markup
<apex:page standardController="Campaign" extensions="showCampaignMembers">
<apex:form >
<apex:pageBlock title="{!campaign.name}">
<apex:pageBlockSection title="Criteria">
<apex:outputLabel value="Enter Name Snippet"/>
<apex:inputText value="{!nameQuery}"/>
<apex:commandButton action="{!executeSearch}" value="Search"/>
</apex:pageBlockSection>
<apex:pageBlockTable value="{!contacts}" var="con">
<apex:column headerValue="Name">
<apex:outputLink value="/{!con.id}/e?retURL={!URLENCODE('/apex/RetUrlSearchPage?query='+nameQuery)}">{!con.Name}</apex:outputLink>
</apex:column>
<apex:column value="{!con.Participant__c}"/>
</apex:pageBlockTable>
<apex:pageBlockSection title="Participants in Campaign">
<apex:pageBlockTable value="{!participants}" var="part">
<apex:column value="{!part.FirstName}"/>
<apex:column value="{!part.LastName}"/>
<apex:column value="{!part.Email}"/>
<apex:column value="{!part.Status}"/>
</apex:pageBlockTable>
</apex:pageBlockSection>
</apex:pageBlock>
</apex:form>
</apex:page>
-----------
And the controller
-----------
public class showCampaignMembers
{
public String nameQuery {get; set;}
public List<Contact> contacts {get; set;}
Public List<CampaignMember> participants {get; set;}
private ApexPages.StandardController std;
public PageReference executeSearch()
{
String queryStr='%' + nameQuery + '%';
contacts=[select id, Name, Participant__c
from Contact
where name like :queryStr];
return null;
}
public showCampaignMembers(ApexPages.StandardController stdCtrl)
{
Std = stdCtrl;
Participants = [SELECT id, FirstName, LastName, Email, Status FROM CampaignMember
WHERE CampaignId = :std.getId() ORDER BY FirstName];
}
}
I appreciate any help.
My problem is that I don't know how to implement that last bit. Since the list of contats is displayed with a pageBlockTable how does the controller know which contact was selected.
Here is my VF page markup
<apex:page standardController="Campaign" extensions="showCampaignMembers">
<apex:form >
<apex:pageBlock title="{!campaign.name}">
<apex:pageBlockSection title="Criteria">
<apex:outputLabel value="Enter Name Snippet"/>
<apex:inputText value="{!nameQuery}"/>
<apex:commandButton action="{!executeSearch}" value="Search"/>
</apex:pageBlockSection>
<apex:pageBlockTable value="{!contacts}" var="con">
<apex:column headerValue="Name">
<apex:outputLink value="/{!con.id}/e?retURL={!URLENCODE('/apex/RetUrlSearchPage?query='+nameQuery)}">{!con.Name}</apex:outputLink>
</apex:column>
<apex:column value="{!con.Participant__c}"/>
</apex:pageBlockTable>
<apex:pageBlockSection title="Participants in Campaign">
<apex:pageBlockTable value="{!participants}" var="part">
<apex:column value="{!part.FirstName}"/>
<apex:column value="{!part.LastName}"/>
<apex:column value="{!part.Email}"/>
<apex:column value="{!part.Status}"/>
</apex:pageBlockTable>
</apex:pageBlockSection>
</apex:pageBlock>
</apex:form>
</apex:page>
-----------
And the controller
-----------
public class showCampaignMembers
{
public String nameQuery {get; set;}
public List<Contact> contacts {get; set;}
Public List<CampaignMember> participants {get; set;}
private ApexPages.StandardController std;
public PageReference executeSearch()
{
String queryStr='%' + nameQuery + '%';
contacts=[select id, Name, Participant__c
from Contact
where name like :queryStr];
return null;
}
public showCampaignMembers(ApexPages.StandardController stdCtrl)
{
Std = stdCtrl;
Participants = [SELECT id, FirstName, LastName, Email, Status FROM CampaignMember
WHERE CampaignId = :std.getId() ORDER BY FirstName];
}
}
I appreciate any help.
Your requirement can be fulfilled by using a wrapper class. Below is the code example of a requirement where a list of accounts will be displayed on vf page along with a checkbox on each row. When user selects the particular records, the controller will have a all records but you can distinguish with the help of checkbox true and false.
Hit thumbsup if it helps
Regards,
Zaja.
All Answers
Your requirement can be fulfilled by using a wrapper class. Below is the code example of a requirement where a list of accounts will be displayed on vf page along with a checkbox on each row. When user selects the particular records, the controller will have a all records but you can distinguish with the help of checkbox true and false.
Hit thumbsup if it helps
Regards,
Zaja.