我有一个页面需要将数据传递到另一个页面。它们都使用相同的控制器,但第二页有自己的控制器扩展。当第一页将数据传递到第二页时,第二页将调用控制器的构造函数。如果我从第二页中删除控制器扩展,则可以传递数据,只在第一页上调用构造函数,而不是在第二页上调用。
如果两个页面都使用相同的控制器,但是一个页面使用控制器扩展名,那么如何将状态从一个页面传递到另一个页面?
例如,在下面的代码中,如果我在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) {
}
}
答案 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>