是否有可能从visualforce apex标签传递参数?

mas*_*san 2 arguments salesforce visualforce

我有一个函数searchWorkByName,它以"key"作为参数,并使用SQOL来检索数据.

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

例如,(这会引发错误)

<apex:commandLink value="search!" action="{!searchWorkByName('aaa')}" />
Run Code Online (Sandbox Code Playgroud)

如果没有替代方案,是否可以这样做?

顶级课程

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;   
     }
}
Run Code Online (Sandbox Code Playgroud)

visualforce

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

小智 10

您可以将页面中的参数传递到如下函数:

<apex:commandLink value="search!" action="{!searchWorkByName}">
  <apex:param name="key" value="val"/>
</apex:commandLink>
Run Code Online (Sandbox Code Playgroud)

显然,在这种情况下参数的值是固定的.如果你想要一些动态的东西(即用户输入一些东西并传递给函数),我不是百分之百地确定你是怎么做的,但我认为这可能是可能的.然而,已经发布的解决方案为您提供了皮肤猫,但我想我会跟进一个替代方案,以防它有用.


eye*_*eam 5

不,你不能将参数传递给那样的行为.

1选项是使这个变量成为一个普通的表单字段,用户可以从下拉列表中选择文本/选择 - 如果你在Apex中使用相同的名称(并通过setter/getters使其公开可见),这将有效没有问题.查看我如何将Salesforce与Google地图集成的答案开始.

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

祝好运!