如果两个页面使用相同的控制器,但第二个页面使用控制器扩展,如何将变量状态从一个页面传递到另一个页面?

时间:2013-04-02 01:18:27

标签: salesforce apex-code visualforce force.com

我有一个页面需要将数据传递到另一个页面。它们都使用相同的控制器,但第二页有自己的控制器扩展。当第一页将数据传递到第二页时,第二页将调用控制器的构造函数。如果我从第二页中删除控制器扩展,则可以传递数据,只在第一页上调用构造函数,而不是在第二页上调用。

如果两个页面都使用相同的控制器,但是一个页面使用控制器扩展名,那么如何将状态从一个页面传递到另一个页面?

例如,在下面的代码中,如果我在outputText中为变量t输入数据然后转到下一页,则状态不会保存,构造函数将被调用,并且值为t在第2页将"构建"。如果从第二页删除testExtension,那么一切正常。

顶点/ TEST1 VisualForce

<apex:page controller="test">
    <apex:outputText value="{!t}" />
    <apex:commandButton action="/test2" value="Go to test2" />
</apex:page>

控制器

class test {
    public String t {get; set;}
    public test() {
        t = 'construct';
    }
}

apex / test2 VisaulForce

<apex:page controller="test" extension="testExtension">
    <apex:outputLabel value="{!t}" />
</apex:page>

控制器扩展:

class testExtension {
    public testExtension(test controller) {  
    }
}

2 个答案:

答案 0 :(得分:1)

public with sharing class Fake01_Controller {


    public String fake02String {get;set;}


    public PageReference fake03Submit() {
        PageReference prToNavigate = null;

        prToNavigate = Page.Fake_02;

        return prToNavigate;
    }

}

假01页:

<apex:form >

    <apex:inputText value="{!fake02String}" />

    <apex:commandButton action="{!fake03Submit}" 
        value="Navigate to Fake 02" 
    />

</apex:form>

假02页:

<apex:form >

    <apex:outputText value="{!fake02String}" />

</apex:form>

请阅读PageReference有关setRedirect方法的信息:

  

如果设置为false,则重定向是保留的服务器端转发   当且仅当目标页面使用相同的控制器时,视图状态   并包含源页面使用的适当扩展子集。

答案 1 :(得分:0)

class test {
    public String t {get; set;}
    public test() {
        t = 'construct';
    }
   public PageReference test2() {
       return page.test2;
    }
}

<apex:page controller="test">
    <apex:outputText value="{!t}" />
    <apex:commandButton action="{!test2)" value="Go to test2" />
</apex:page>