Salesforce 从visualforce页面向控制器传递静态/硬编码值

Salesforce 从visualforce页面向控制器传递静态/硬编码值,salesforce,visualforce,Salesforce,Visualforce,我正在为仪表板创建8个visualforce页面(VFP),由于每个VFP所需数据的相似性,我希望利用单个自定义控制器(而不是8个控制器) 每个VFP之间的唯一区别是控制器中SOQL语句的WHERE子句。我的想法是让每个VFP向控制器传递一个静态(非更改/硬编码)字符串,以便在控制器的SOQL WHERE子句中使用。以下是我正在寻找的一个例子: 控制器: public class sales修订版前期费用{ 公共字符串StageVal{get;set;} 公共整数salesVal=0; 公共整数

我正在为仪表板创建8个visualforce页面(VFP),由于每个VFP所需数据的相似性,我希望利用单个自定义控制器(而不是8个控制器)

每个VFP之间的唯一区别是控制器中SOQL语句的WHERE子句。我的想法是让每个VFP向控制器传递一个静态(非更改/硬编码)字符串,以便在控制器的SOQL WHERE子句中使用。以下是我正在寻找的一个例子:

控制器:
public class sales修订版前期费用{
公共字符串StageVal{get;set;}
公共整数salesVal=0;
公共整数intTCV;
公共销售修订版预付费(){
getData();
}
public void getData(){
//插入代码以从visualforce页面中提取硬编码的“StageVal”
String SoqlString='选择总和(总订阅费)RevSum\n'+
'来自Opportunity\n'+

'其中CloseDate>=2018-01-01和CloseDate尝试查看带有标记的标记,该标记应该可以将您带到您想要去的地方。操作函数允许您调用控制器方法,还允许您传递分配给属性的参数,该属性具有您可以设置的值

<apex:actionFunction action="{!someMethod}" name="someMethodName" rerender="ifNeeded">
    <apex:param name="stageParam" assignTo="{!StageVal}" value="Closed Won" />
</apex:actionFunction>
更新

因此,我创建了一个完全可以工作的示例页面,以便您能够更好地看到它的实际效果

VF页面

<apex:page controller="TestController" >
  <h1>Congratulations</h1>
      This is your new Page: Test
  <apex:form >
      <apex:actionFunction action="{!someMethod}" name="someMethodName" rerender="ifNeeded">
          <apex:param name="stageParam" assignTo="{!StageVal}" value="Closed Won" />
      </apex:actionFunction>
      <apex:outputPanel id="ifNeeded">{!StageVal} {!opps.size}

      </apex:outputPanel>
      <script>
          window.onload = function() {
               someMethodName();//or someMethodName('Closed Lost'); to replace default of param variable
          }
      </script>
   </apex:form>
</apex:page>

祝贺
这是您的新页面:测试
{!StageVal}{!opp.size}
window.onload=函数(){
someMethodName();//或someMethodName('Closed Lost');替换参数变量的默认值
}
控制器

public class TestController {

    public String StageVal {get;set;}

    public List<Opportunity> opps {get;set;}

    public PageReference someMethod() {
        opps = [Select Name from Opportunity WHERE StageName = :StageVal];
        return null;
    }
}
公共类TestController{
公共字符串StageVal{get;set;}
公共列表opp{get;set;}
公共页面引用方法(){
opps=[从Opportunity中选择名称,其中StageName=:StageVal];
返回null;
}
}

发生了什么…actionfunction标记声明了一个js函数,该函数将对控制器进行异步调用,参数按其出现的顺序列在param标记中。这将导致服务器端控制器部分后处理,调用action function标记的action属性(js的名称)指定的方法方法。作为回发属性的一部分,回发属性将更新,因此您的参数将可在控制器中使用。

尝试查看带有标记的标记,该标记应可将您带到您想去的地方。操作函数允许您调用控制器方法,也允许u传递参数指定给具有可设置值的特性

<apex:actionFunction action="{!someMethod}" name="someMethodName" rerender="ifNeeded">
    <apex:param name="stageParam" assignTo="{!StageVal}" value="Closed Won" />
</apex:actionFunction>
更新

因此,我创建了一个完全可以工作的示例页面,以便您能够更好地看到它的实际效果

VF页面

<apex:page controller="TestController" >
  <h1>Congratulations</h1>
      This is your new Page: Test
  <apex:form >
      <apex:actionFunction action="{!someMethod}" name="someMethodName" rerender="ifNeeded">
          <apex:param name="stageParam" assignTo="{!StageVal}" value="Closed Won" />
      </apex:actionFunction>
      <apex:outputPanel id="ifNeeded">{!StageVal} {!opps.size}

      </apex:outputPanel>
      <script>
          window.onload = function() {
               someMethodName();//or someMethodName('Closed Lost'); to replace default of param variable
          }
      </script>
   </apex:form>
</apex:page>

祝贺
这是您的新页面:测试
{!StageVal}{!opp.size}
window.onload=函数(){
someMethodName();//或someMethodName('Closed Lost');替换参数变量的默认值
}
控制器

public class TestController {

    public String StageVal {get;set;}

    public List<Opportunity> opps {get;set;}

    public PageReference someMethod() {
        opps = [Select Name from Opportunity WHERE StageName = :StageVal];
        return null;
    }
}
公共类TestController{
公共字符串StageVal{get;set;}
公共列表opp{get;set;}
公共页面引用方法(){
opps=[从Opportunity中选择名称,其中StageName=:StageVal];
返回null;
}
}

发生了什么…actionfunction标记声明了一个js函数,该函数将对控制器进行异步调用,参数按其出现的顺序列在param标记中。这将导致服务器端控制器部分后处理,调用action function标记的action属性(js的名称)指定的方法actionfunction标记的name属性中的方法。作为回发属性的一部分,属性会更新,因此您的参数可以在控制器中使用。

感谢您的响应。这使我走上了正确的道路,但我仍在尝试完全理解。我添加了以下内容:有一个可能更简单的解决方案。您可以通过Url/apex/Page1?value=staticvalue中的参数,然后使用Apexpages.CurrentPage().getParameters().get('value');或者在控制器中,只需使用Apexpages.CurrentPage().getURL()检查您所在的Url并根据url设置静态变量。是的,我没有提供该解决方案,因为url参数很容易被user@GarethJordan-多亏了你的帮助,现在一切都正常了!我真的很感谢你花时间在这件事上-谢谢你!谢谢你的回复。这让我走上了正确的轨道,但我仍在努力完全恢复这是我添加的内容:有一个可能更简单的解决方案。您可以在Url/apex/Page1?value=staticvalue中传递参数,然后使用Apexpages.CurrentPage().getParameters().get('value');或者在控制器中使用Apexpages.CurrentPage().getURL()检查您所在的Url并根据url设置静态变量。是的,我没有提供该解决方案,因为url参数很容易被user@GarethJordan-多亏了你的帮助,一切都正常了!我真的很感谢你花时间在这件事上-谢谢!