如何从另一个 Class 将值放入 Controller?

How to put value in Controller from another Class?

我想从另一个 class (Class A) 中的 VF Page 调用 PageReference,以便它可以生成 PDF 并设置为附件。 VF 页面正在从其控制器获取 ID。我想将 Class A 中的 ID 放到 VF 页面,这样它就会被使用,而不是控制器。

VF 页面名称:ContactDocument

public class DocuGenerate {
    public Contact ccc {get;set;} 

    public CaseClosureDocumentController(ApexPages.StandardController controller)
    {
        ccc = (Contact) controller.getRecord();
        ccc = [SELECT ID, NAME FROM CONTACT WHERE ID =: ccc.id];

        //GENERATE A PDF WITH THE ID RETRIEVED.
    }
}


public class SendEmail {
    public static void SendMessage() {
        List<Contact> con = [SELECT ID FROM CONTACT LIMIT 1];
        for(Contact c : con){
            Pagereference vfpage1 = Page.ContactDocument;
            //HOW WILL I PASS CON.ID TO VF PAGE SO THAT IT WILL BE THE ONE TO PROCESS, NOT THE ONE IN VFPAGE?
        }
    }
}

预期:生成一个 PDF 文件,其中的信息是关于我在另一个 CLASS 中的联系人 ID,而不是 VF 页面中生成的那个。

你的问题不清楚。我所了解的是,您想从另一个 class 而不是 VF 页面的标准控制器访问联系人。

您可以通过在 visualforce 页面中添加引用 class A 的扩展控制器来实现。然后,在 DocuGenerate class 中,创建另一个接收 class 类型参数的构造函数。

<apex:page standardController="yourStandardController" extensions="A">
---
</apex:page>

据我所知,您想将联系人 ID 从您现在所在页面的控制器发送到 PDF 呈现页面...您可以通过页面引用和 URL 参数。向页面引用添加参数意味着该页面(标准或扩展)的任何控制器都可以获得此 ID 并使用该记录。以下是将参数添加到页面引用的方法...

public class SendEmail {
   public static void SendMessage() {
     List<Contact> con = [SELECT ID FROM CONTACT LIMIT 1];
     for(Contact c : con){
       Pagereference vfpage1 = Page.ContactDocument;
       vfpage1.getParameters().put('id', c.id);
       return vfpage1; //You probably need to return the page reference 
                       //in order to redirect to it
     }
   }
}