我有一个函数searchWorkByName,它以“key”作为参数,并使用SQOL来检索数据。
在visualforce方面,我有一个调用searchWorkByName的链接,但希望能够传递诸如字符'a'
之类的参数示例,(这会引发错误)
<apex:commandLink value="search!" action="{!searchWorkByName('aaa')}" />
如果没有替代方案,是否可以这样做?
apex class
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>
答案 0 :(得分:10)
您可以将页面中的参数传递到以下函数中:
<apex:commandLink value="search!" action="{!searchWorkByName}">
<apex:param name="key" value="val"/>
</apex:commandLink>
显然,这种情况下参数的值是固定的。如果你想要一些动态的东西(即用户输入一些东西并传递给函数),我不是百分之百确定你是怎么做到的,但我认为这可能是可能的。然而,已经发布的解决方案可以为您提供皮肤猫,但我认为如果有任何用处,我会跟进一个替代方案。
答案 1 :(得分:5)
不,你不能将参数传递给那样的行为。
1选项是使此变量成为普通表单字段,用户可以从下拉列表中选择文本/选择 - 如果您在Apex中为变量使用相同的名称(并使其由setter / getters公开显示),这将毫无问题地工作。在How do I integrate Salesforce with Google Maps?查看我的答案即可开始使用。
第二个选项 - 如果必须以某种方式以编程方式完成此搜索而无需用户点击任何内容,例如数据来自页面本身(即在<apex:repeat>
标签中读取)...您可以做一个小的帮助页面&amp;控制器并将它们称为组件。将数据传递给组件没有问题。查看<apex:component>
和<apex:componentBody>
的文档。但我认为第一个答案对你最有用。