E 'possibile passare da tag argomento Visualforce apice?
-
28-09-2019 - |
Domanda
Ho una funzione che prende searchWorkByName "chiave" come SQOL argomento e utilizzare per recuperare i dati.
Nel lato Visualforce, ho un link che chiama searchWorkByName ma vorrei essere in grado di passare all'argomento, come carattere 'a'
esempio, (questo genera un errore)
<apex:commandLink value="search!" action="{!searchWorkByName('aaa')}" />
E 'possibile farlo se non ciò che è le alternative?
apice classe
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;
}
}
Visualforce
<apex:page standardController="work__c" extenstions="SearchWorkTest">
<!-- Is it possible to pass argument like 'foo' ? -->
<apex:commandLink value="search!" action="{!searchWorkByName}" />
</apex:page>
Soluzione
No, non è possibile passare gli argomenti ad azioni del genere.
1 opzione è quella di rendere questa variabile un normale campo di modulo che l'utente può digitare il testo / selezionare dal menu a discesa / qualunque cosa - se userete stesso nome per una variabile in Apex (e renderlo pubblicamente visibile setter / getter), questo funzionerà senza problemi. Scopri la mia risposta a Come faccio a integrare Salesforce con Google Maps? per iniziare.
Seconda opzione - se questa ricerca deve essere in qualche modo fatto programmaticamente, senza dover fare clic dell'utente nulla, se i dati, ad esempio viene dalla pagina stessa (cioè si legge nel tag <apex:repeat>
) ... si potrebbe fare una piccola pagina di supporto del controller & e li chiamano come componenti. Non c'è nessun problema con il passaggio di dati ai componenti. Controllare la documentazione per <apex:component>
e <apex:componentBody>
. Ma penso che os prima risposta più utile per voi.
In bocca al lupo!
Altri suggerimenti
È possibile passare i parametri da una pagina in una funzione come questa:
<apex:commandLink value="search!" action="{!searchWorkByName}">
<apex:param name="key" value="val"/>
</apex:commandLink>
Ovviamente, il valore del parametro in questo caso è fisso. Se volete qualcosa di dinamico (cioè utente digita qualcosa e che viene passato alla funzione), non sono sicuro al 100% di come si farebbe questo, ma penso che potrebbe essere possibile. Tuttavia, la soluzione già postato pelli il gatto per voi, ma ho pensato di follow-up con un'alternativa nel caso in cui si tratta di qualche utilità.