我有一个VisualForce页面 testPage
<apex:page controller="testController">
{!myString}, {!myString1}, {!myString2}, {!Mystring3}, {!myString}
</apex:page>
控制器是
public class testController {
public string myString {get;set;}
public string getMyString1()
{
return myString;
}
public string getMyString2()
{
if(myString==null)
myString = 'Method2';
return myString;
}
public void getMystring3()
{
myString = 'Method3';
}
}
加载页面时,它输出, , Method2, ,
。
方法 getMyString2 和 getMystring3 都设置了属性。
为什么未在此处设置myString
属性?
答案 0 :(得分:0)
我知道Salesforce曾经为测试类保留单词“ test”。如果根本没有触发,请尝试重命名。 Salesforce可能正在测试类。
答案 1 :(得分:0)
评估页面中的合并表达式时:
{!myString}, {!myString1}, {!myString2}, {!Mystring3}, {!myString}
事件的顺序是:
1。testController get(myString)
,它为null,因为尚未初始化变量
2。testController get(myString1)
,它也为空,因为返回的值仍然为空
3。testController get(myString2)
,它将变量myString
设置为Method2
的值并返回该值
4。testController get(Mystring3)
返回,将变量myString
设置为值Method3
,但不返回任何内容
5。就是这样。即使{!myString}
再次写入了Visualforce页面,该页面也不会返回到控制器以再次获取值,因为它已经获取了一次并且已经知道了它的值;假设(在这种情况下错误地)假设值没有改变。
如果您将VF页面更改为:
<apex:page controller="testController">
{!myString1}, {!myString2}, {!Mystring3}, {!myString}
</apex:page>
testController get(myString)
将在testController get(Mystring3)
之后调用,因此结果页面将显示:
,Method2,,Method3
话虽如此,但吸气剂不应改变程序的状态,如果您依靠这种行为,只会使您的代码难以理解。