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

Posted

技术标签:

【中文标题】为啥该属性未在 Salesforce Apex 中设置?【英文标题】: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() 方法?而不是设置;并得到; 【参考方案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 不应该改变程序的状态,如果您依赖这种类型的行为,它只会让您的代码难以理解。

【讨论】:

以上是关于为啥该属性未在 Salesforce Apex 中设置?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Apex 在 SalesForce 中以编程方式访问报告

如何在 Salesforce 中重命名我的 Apex 类名称

Salesforce自主学习

我们可以在 Salesforce(apex) 中动态投射 SObject 吗?

salesforce零基础学习(七十四)apex:actionRegion以及apex:actionSupport浅谈

APEX 中的 Salesforce UserInfo 会话类型