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

为什么属性未在Salesforce Apex中设置?,salesforce,apex,Salesforce,Apex,我有一个VisualForce页面testPage <apex:page controller="testController"> {!myString}, {!myString1}, {!myString2}, {!Mystring3}, {!myString} </apex:page> 加载页面时,它输出,Method2,。 方法getMyString2和getMystring3都设置了属性。 为什么这里没有设置myString属性 我知道Salesforc

我有一个VisualForce页面testPage

<apex:page controller="testController">
    {!myString}, {!myString1}, {!myString2}, {!Mystring3}, {!myString}
</apex:page>
加载页面时,它输出
,Method2,
。 方法getMyString2getMystring3都设置了属性。
为什么这里没有设置
myString
属性

我知道Salesforce曾经为测试类保留“测试”一词。如果它根本不启动,试着重新命名它。Salesforce可能认为它们是测试类。

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

{!myString}, {!myString1}, {!myString2}, {!Mystring3}, {!myString}
事件顺序如下:

1.,
testController get(myString)
,该值为空,因为变量尚未初始化

2.,
testController get(myString1)
,由于返回的值仍然为null,因此也是null

3.,
testController get(myString2)
,它将变量
myString
设置为
Method2
的值并返回该值

4.,
testController get(Mystring3)
,返回将变量
myString
设置为值
Method3
,不返回任何内容

5.就这样。即使在visualforce页面中再次写入
{!myString}
,该页面也不会返回控制器再次获取值,因为它已经获取了一次,并且已经知道它的值;假设(在本例中是错误的)值没有更改


如果您将VF页面更改为:

<apex:page controller="testController">
    {!myString1}, {!myString2}, {!Mystring3}, {!myString}
</apex:page>

{!myString1},{!myString2},{!Mystring3},{!myString}
testController get(myString)
将在
testController get(Mystring3)
之后调用,因此生成的页面将显示:

,方法2,方法3



尽管如此,getter不应该更改程序的状态,如果您依赖于这种行为,它只会使您的代码难以理解。

您是否尝试过使用简单的setString()方法?而不是设置;得到;
<apex:page controller="testController">
    {!myString1}, {!myString2}, {!Mystring3}, {!myString}
</apex:page>