2

我有一个函数 searchWorkByName 将“key”作为参数并使用 SQOL 来检索数据。

在visualforce方面,我有一个调用searchWorkByName的链接,但希望能够传递诸如字符'a'之类的参数

例如,(这会引发错误)

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

如果没有其他选择,是否可以这样做?

顶尖级

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;   
     }
}

视觉力量

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

2 回答 2

10

您可以将页面中的参数传递给这样的函数:

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

显然,这种情况下的参数值是固定的。如果你想要一些动态的东西(即用户键入一些东西并将其传递给函数),我不能 100% 确定你会如何做到这一点,但我认为这可能是可能的。但是,该解决方案已经为您发布了猫的皮肤,但我想我会跟进一个替代方案,以防它有任何用途。

于 2010-11-05T10:30:00.197 回答
5

不,您不能将参数传递给这样的操作。

1 选项是使此变量成为用户可以键入文本/从下拉列表中选择的普通表单字段/无论 - 如果您将在 Apex 中为变量使用相同的名称(并使其由 setter/getter 公开可见),这将起作用没有问题。查看我在如何将 Salesforce 与 Google 地图集成?开始。

第二个选项 - 如果这个搜索必须以某种方式以编程方式完成,而用户不必点击任何东西,如果数据来自页面本身(即在<apex:repeat>标签中读取)......你可以制作一个小的帮助页面和控制器并将它们称为组件。将数据传递给组件没有问题。检查<apex:component>和的文档<apex:componentBody>。但我认为第一个答案 os 对你最有用。

祝你好运!

于 2010-11-04T11:48:44.203 回答