2010-11-04 3 views
2

J'ai une fonction searchWorkByName qui prend "key" comme argument et utilise SQOL pour récupérer les données.Est-il possible de passer un argument à partir de la balise visualforce apex?

En côté Visualforce, j'ai un lien qui appelle searchWorkByName mais voudrait être en mesure de passer l'argument tel que le caractère « a »

exemple, (ce qui renvoie une erreur)

<apex:commandLink value="search!" action="{!searchWorkByName('aaa')}" /> 

Est Est-il possible de le faire sinon quelles sont les alternatives?

classe sommet

public class SearchWorkTest { 

    public PageReference searchWorkByName(String key) { 

      //find record of work names starting from provided key character 
      workNames = [select name from work__c where work__c.name like 'key%']; 
      return Page.searchResult; 
    } 
} 

de Visualforce

<apex:page standardController="work__c" extenstions="SearchWorkTest"> 
    <!-- Is it possible to pass argument like 'foo' ? --> 
    <apex:commandLink value="search!" action="{!searchWorkByName}" /> 
</apex:page> 

Répondre

5

Non, vous ne pouvez pas passer des arguments à des actions comme ça.

1 option consiste à faire de cette variable un champ de formulaire normal dans lequel l'utilisateur peut taper text/select depuis dropdown/whatever - si vous utilisez le même nom pour une variable dans Apex (et le rendre publiquement visible par setters/getters) , cela fonctionnera sans problèmes. Consultez ma réponse au How do I integrate Salesforce with Google Maps? pour commencer.

Deuxième option - si cette recherche doit être en quelque sorte fait sans utilisateur programatically avoir à cliquer sur quoi que ce soit, si les données vient par exemple de la page elle-même (par exemple est lu dans <apex:repeat> tag) ... vous pouvez faire une petite page d'aide & contrôleur et appelez-les comme composants. Il n'y a aucun problème à transmettre des données aux composants. Consultez la documentation pour <apex:component> et <apex:componentBody>. Mais je pense que la première réponse est la plus utile pour vous.

Bonne chance!

+0

Merci pour le conseil! –

10

Vous pouvez passer des paramètres à partir d'une page en fonction comme ceci:

<apex:commandLink value="search!" action="{!searchWorkByName}"> 
    <apex:param name="key" value="val"/> 
</apex:commandLink> 

De toute évidence, la valeur du paramètre dans ce cas est fixe. Si vous voulez quelque chose de dynamique (c'est-à-dire que l'utilisateur tape quelque chose et qui est passé à la fonction), je ne suis pas sûr à 100% comment vous feriez cela, mais je pense que cela pourrait être possible. Cependant, la solution déjà postée traite le chat pour vous, mais j'ai pensé que je ferais un suivi en cas d'utilisation.

+0

+1 Merde, oublié celui-là :) – eyescream

Questions connexes