2

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

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

比如下面的代码,如果我在 outputText 中为变量 t 输入数据,然后进入下一页,状态不会保存,构造函数会被调用,第 2 页的 t 的值为“构造”。如果 testExtension 从第二页中删除,那么一切正常。

顶点/测试1 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';
    }
}

顶点/测试2 VisaulForce

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

控制器扩展:

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

2 回答 2

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>

请阅读有关setRedirect方法的 PageReference:

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

于 2013-04-02T20:38:59.353 回答
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>
于 2013-04-02T06:59:20.673 回答