为啥该属性未在 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, ,
。
getMyString2 和 getMyString3 方法都设置了属性。
为什么这里没有设置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(apex) 中动态投射 SObject 吗?