You need to sign in to do that
Don't have an account?
Issue with Dynamic Search Picklist Display
Hi all,
Looking for help on an issue with my controller and visualforce page.
The issue I am having is that the picklist value for 'Interested Technologies' is returning weird results vs. just the name of the account.

Here is my controller:
Looking for help on an issue with my controller and visualforce page.
The issue I am having is that the picklist value for 'Interested Technologies' is returning weird results vs. just the name of the account.
Here is my controller:
public with sharing class ContactSearchController { // the soql without the order and limit private String soql {get;set;} // the collection of contacts to display public List<Contact> contacts {get;set;} // the collection of accounts to display public Id selectedAccId{get;set;} public Boolean IsEmpty {get; set;} // the current sort direction. defaults to asc public String sortDir { get { if (sortDir == null) { sortDir = 'asc'; } return sortDir; } set; } // the current field to sort by. defaults to last name public String sortField { get { if (sortField == null) {sortField = 'lastName'; } return sortField; } set; } // format the soql for display on the visualforce page public String debugSoql { get { return soql + ' order by ' + sortField + ' ' + sortDir + ' limit 20'; } set; } // init the controller and display some sample data when the page loads public ContactSearchController() { soql = 'select firstname, lastname, account.name, interested_technologies__c from contact where account.name != null'; runQuery(); } // toggles the sorting of query from asc<-->desc public void toggleSort() { // simply toggle the direction sortDir = sortDir.equals('asc') ? 'desc' : 'asc'; // run the query again runQuery(); } // runs the actual query public void runQuery() { try { contacts = Database.query(soql + ' order by ' + sortField + ' ' + sortDir + ' limit 20'); } catch (Exception e) { ApexPages.addMessage(new ApexPages.Message(ApexPages.Severity.ERROR, 'Ooops!')); } } // runs the search with parameters passed via Javascript public PageReference runSearch() { String firstName = Apexpages.currentPage().getParameters().get('firstname'); String lastName = Apexpages.currentPage().getParameters().get('lastname'); String accountName = Apexpages.currentPage().getParameters().get('accountName'); String technology = Apexpages.currentPage().getParameters().get('technology'); soql = 'select firstname, lastname, account.name, interested_technologies__c from contact where account.name != null'; if (!firstName.equals('')) soql += ' and firstname LIKE \''+String.escapeSingleQuotes(firstName)+ '%\''; if (!lastName.equals('')) soql += ' and lastname LIKE \''+String.escapeSingleQuotes(lastName)+ '%\''; if (!accountName.equals('')) soql += ' and account.name LIKE \''+String.escapeSingleQuotes(accountName)+ '%\''; if (!technology.equals('')) soql += ' and interested_technologies__c includes (\''+technology+'\')'; // run the query again runQuery(); return null; } // use apex describe to build the picklist values public List<String> technologies { get { if (technologies == null) { technologies = new List<String>(); Schema.DescribeFieldResult field = Contact.interested_technologies__c.getDescribe(); for (Schema.PicklistEntry f : field.getPicklistValues()) technologies.add(f.getLabel()); } return technologies; } set; } /*public List<String> options { get { if (options == null) { options = new List<String>(); Schema.DescribeFieldResult field = Account.Name.getDescribe(); for (Schema.PicklistEntry f : field.getPicklistValues()) options.add(f.getLabel()); } return options; } set; }*/ //builds a picklist of account names based on their account id public List<selectOption> getaccts() { List<selectOption> options = new List<selectOption>(); //new list for holding all of the picklist options options.add(new selectOption('', '- None -')); //add the first option of '- None -' in case the user doesn't want to select a value or in case no values are returned from query below for (Account account : [SELECT Id, Name FROM Account]) { //query for Account records options.add(new selectOption(account.Name, account.Name)); //for all records found - add them to the picklist options } return options; //return the picklist options } }Here is my visualforce page:
<apex:page controller="ContactSearchController" sidebar="false"> <apex:form > <apex:pageMessages id="errors" /> <apex:pageBlock title="Search Collaborative Wide Staff Directory" mode="edit"> <table width="100%" border="0"> <tr> <td width="200" valign="top"> <apex:pageBlock title="Search Properties" mode="edit" id="criteria"> <script type="text/javascript"> function doSearch() { searchServer( document.getElementById("firstName").value, document.getElementById("lastName").value, document.getElementById("accountName").value, document.getElementById("technology").options[document.getElementById("technology").selectedIndex].value ); } </script> <apex:actionFunction name="searchServer" action="{!runSearch}" rerender="results,debug,errors"> <apex:param name="firstName" value="" /> <apex:param name="lastName" value="" /> <apex:param name="accountName" value="" /> <apex:param name="technology" value="" /> </apex:actionFunction> <table cellpadding="2" cellspacing="2"> <tr> <td style="font-weight:bold;">First Name<br/> <input type="text" id="firstName" onkeyup="doSearch();"/> </td> </tr> <tr> <td style="font-weight:bold;">Last Name<br/> <input type="text" id="lastName" onkeyup="doSearch();"/> </td> </tr> <tr> <td style="font-weight:bold;">Account<br/> <input type="text" id="accountName" onkeyup="doSearch();"/> </td> </tr> <tr> <td style="font-weight:bold;">Interested Technologies<br/> <select id="technology" onchange="doSearch();"> <option value=""></option> <apex:repeat value="{!accts}" var="tech"> <option value="{!tech}">{!tech}</option> </apex:repeat> </select> </td> </tr> </table> <!--<apex:pageBlockSection title="Custom Picklist Using selectList and selectOptions"> <apex:selectList value="{!options}" multiselect="false" size="1"> <apex:selectOptions value="{!accts}"/> </apex:selectList> </apex:pageBlockSection>--> </apex:pageBlock> </td> <td valign="top"> <apex:pageBlock mode="edit" id="results"> <apex:pageBlockTable value="{!contacts}" var="contact"> <apex:column > <apex:facet name="header"> <apex:commandLink value="First Name" action="{!toggleSort}" rerender="results,debug"> <apex:param name="sortField" value="firstName" assignTo="{!sortField}"/> </apex:commandLink> </apex:facet> <apex:outputField value="{!contact.firstName}"/> </apex:column> <apex:column > <apex:facet name="header"> <apex:commandLink value="Last Name" action="{!toggleSort}" rerender="results,debug"> <apex:param name="sortField" value="lastName" assignTo="{!sortField}"/> </apex:commandLink> </apex:facet> <apex:outputField value="{!contact.lastName}"/> </apex:column> <apex:column > <apex:facet name="header"> <apex:commandLink value="Account" action="{!toggleSort}" rerender="results,debug"> <apex:param name="sortField" value="account.name" assignTo="{!sortField}"/> </apex:commandLink> </apex:facet> <apex:outputField value="{!contact.account.name}"/> </apex:column> <apex:column > <apex:facet name="header"> <apex:commandLink value="Technologies" action="{!toggleSort}" rerender="results,debug"> <apex:param name="sortField" value="interested_technologies__c" assignTo="{!sortField}"/> </apex:commandLink> </apex:facet> <apex:outputField value="{!contact.interested_technologies__c}"/> </apex:column> </apex:pageBlockTable> </apex:pageBlock> </td> </tr> </table> <apex:pageBlock title="Debug - SOQL" id="debug"> <apex:outputText value="{!debugSoql}" /> </apex:pageBlock> </apex:pageBlock> </apex:form> </apex:page>What am I missing? Any help is much appreciated.
<option value="{!tech.value}">{!tech.label}</option>
</apex:repeat>
Please try this once.
All Answers
<option value="{!tech.value}">{!tech.label}</option>
</apex:repeat>
Please try this once.
https://developer.salesforce.com/docs/atlas.en-us.pages.meta/pages/apex_System_SelectOption_methods.htm
Below is my code;
VF page:
Controller:
Appreciate your help!