为什么未在Salesforce Apex中设置该属性?

时间:2018-08-15 10:15:14

标签: salesforce apex

我有一个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属性?

2 个答案:

答案 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


话虽如此,但吸气剂不应改变程序的状态,如果您依靠这种行为,只会使您的代码难以理解。