如何打开VF页面作为弹出窗口并将参数传递给该VF页面?

时间:2012-02-09 16:22:24

标签: salesforce apex-code visualforce

我有一个VF页面,其中有2个日期字段和搜索按钮。

点击搜索,我会得到一些结果。我还有另一个按钮来打印那些结果,这只是一个新的VF页面,呈现为pdf。

我想将此日期值传递到printVF页面。我也想让这个页面成为弹出窗口。

我有参数设置的pageref。由于我需要以弹出方式打开此页面,我需要找到一种方法在window.open中使用pageref。

有人有关于如何实现这个目标的想法吗?

由于

Prady

编辑:我所做的是在控制器中构建url并在window.open中使用控制器变量。发生了一些非常奇怪的事情...第一次显示搜索结果并且我点击打印按钮,日期不会填充在字符串中,它们默认为今天的日期..如果我再次单击打印按钮日期正确填充来自dateinput的网址。

      public Class1(){
      System.debug('inside constructor');
       fieldContainer=new DummyTable__c(); // it contains date fields for date inputs
      date todays=date.today();

     If (fieldContainer.Start_Date__c== null)
     {
        startdate1=todays;
     }else
     {
     startdate1=fieldContainer.Start_Date__c;
     }

     If (fieldContainer.End_Date__c== null)
     {
        enddate1=todays;
     }
     else
     {
     enddate1=fieldContainer.End_Date__c;
     }
     }

     public void search()
{

    startdate1=fieldContainer.Start_Date__c;
    system.debug('startdate1'+startdate1);


    enddate1=fieldContainer.End_Date__c;
    system.debug('enddate1'+enddate1);
    system.debug('inside search()....after clicking search button');
    system.debug('startdate1'+startdate1);
    system.debug('url'+url);
    LoadData();
}

    public string geturl()
{
    url='apex/VF1?Pstartdate='+string.valueof(startdate1)+'&Penddate='+string.valueof(enddate1);
    return url;
}

public string geturlRec()
{
    urlRec='apex/VF2?Pstartdate='+string.valueof(startdate1)+'&Penddate='+string.valueof(enddate1);
    return urlRec;
}    

VF页面

   <script  language="javascript" type="text/javascript">
  function printOut()
  {

  window.open("{!url}");

      }
  function printIn()
  {
  window.showModalDialog("{!urlRec}","dialogWidth:800px; dialogHeight:200px; center:yes");

   }
   </script>


    <div style="width:900px;margin:0 auto;" id="pagediv">
     <span style="padding-left:30px;padding-right:10px">From </span><apex:inputfield value="{!fieldContainer.Start_Date__c}" id="startdt" style="padding-left:5px;padding-right:20px;"/>
   <span style="padding-left:30px;padding-right:10px">To </span><apex:inputfield value="{!fieldContainer.End_Date__c}" id="enddt" style="padding-left:5px;padding-right:20px;"/>

     <span style="padding-left:30px;padding-right:10px"><apex:commandButton action="{!search}" value="Search" ReRender="dtshipdep,dtshiprec,shippageblock">       </apex:commandButton></span>

     <apex:commandButton action="{!saveDeparted}" value="Update " ReRender="dtshipdep"></apex:commandButton>
    <apex:commandButton value="Print "  onclick="printOut();"></apex:commandButton>

2 个答案:

答案 0 :(得分:5)

salesforce推荐的生成URL的方法是通过URLFOR()函数。或者,您也可以在扩展/控制器代码中创建PageReference。

但是,请记住,在任何表单数据成为URL的一部分之前,必须将其发布到服务器并返回到新生成的pageReference中,因此您无法在第一次运行时单击它。 / p>

我用来解决此服务器端的一种方法是在VF上使用此代码

<apex:outputBlock rendered="{!openPopup}">
   <script>
      window.open('{!myTargetUrl}');
   <script>
</apex:outputBlock>

openPopup是一个控制该段是否被渲染的bool(瞬态,当您单击打开按钮时将其设置为true)。 myTarget是基于PageReference的网址(或者您可以在此处使用URLFOR在VF中生成网址)。如果您还有其他问题,请询问。

另一种选择是在VF中使用您的javascript代码,它将获取按钮点击事件并构建URL客户端并打开它。您可以使用$ Component来查找表单字段。

答案 1 :(得分:3)

您应该能够在QueryString中传递所需的值。

window.open("/apex/YourPage?VariableName=Value&SecondVariableName=SecondValue");

然后,一旦您将变量发送到新页面,就可以使用PageReference获取它们。

String myVariable = PageReference.getParameters().get('VariableName');