【问题标题】:Why the property is not setting in Salesforce Apex?为什么该属性未在 Salesforce Apex 中设置?
【发布时间】:2019-01-22 05:20:19
【问题描述】:

我有一个 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, ,getMyString2getMyString3 方法都设置了属性。 为什么这里没有设置myString 属性?

【问题讨论】:

  • 您是否尝试过使用简单的 setString() 方法?而不是设置;并得到;

标签: salesforce apex


【解决方案1】:

我知道 Salesforce 曾经为测试类保留“测试”一词。如果它根本没有触发,请尝试重命名它。 Salesforce 可能认为他们是测试类。

【讨论】:

    【解决方案2】:

    在页面中评估合并表达式时:

    {!myString}, {!myString1}, {!myString2}, {!Mystring3}, {!myString}
    

    事件顺序为:

    1.,testController get(myString),为空,因为变量还没有初始化

    2.,testController get(myString1),由于返回的值仍然为空,所以它也是 null

    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) 之后调用,因此结果页面将显示:

    , 方法2, , 方法3


    话虽如此,getter 不应该改变程序的状态,如果您依赖这种类型的行为,它只会让您的代码难以理解。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-04
      • 1970-01-01
      • 2011-07-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多