Apex getter返回错误的值

时间:2012-04-20 13:28:33

标签: javascript salesforce apex-code

我在salesforce页面中有javascript函数来验证其中一个联系人是否有打开案例。此函数调用apex getter来获取值。我面临的问题是顶点getter总是返回错误的布尔值。我试过调试它,一切似乎都有效,但由于某种原因,返回的bool是错误的。

顶点功能:

 public Boolean openCase{
   get{

        if (Contacts.size() > 0){
            for(cContact wContact: dicContacts.values()){
                 if(wContact.selected){                     
                     if(wContact.con.account.Number_of_open_Financial_Review_Cases__c > 1){

                        return true;
                    } 
                 }           
            }                     
    return false;
   }
   set{}

}

js功能:

 function validateOpenCases(sendEmail){

    doIt = true;
    oc = {!openCase};   // <<== problem here
    alert(oc);
      if (oc)
      {
       doIt=confirm('blabla?');
      }
      if(doIt){
            // do stuff
      }
      else{
        // do nothing
      }
  }

1 个答案:

答案 0 :(得分:3)

您不应该直接在JavaScript中绑定Apex对象/变量(就像您拥有{!openCase};)。我以前遇到过很多问题。而是使用JavaScript RemotingAjax Toolkit


更新

另一种选择是使用隐藏的Visualforce输入来存储绑定的Visualforce值。然后,您可以在JavaScript中获得该值。

以下是一个例子:

<apex:page controller="myController">
    <script>
        function getInputEndingWith(endsWith)
        {
            // put together a new Regular Expression to match the 
            // end of the ID because Salesforce prepends parent IDs to
            // all elements with IDs
            var r = new RegExp("(.*)"+endsWith+"$"); 

            // get all of the input elements
            var inputs = document.getElementsByTagName('input');

            // initialize a target
            var target;

            // for all of the inputs
            for (var i = 0; i < inputs.length; ++i)
            {
                // if the ID of the input matches the
                // Regular Expression (ends with)
                if (r.test(inputs[i].id))
                {
                    // set the target
                    target = inputs[i];
                    // break out of the loop because target 
                    // was found
                    break; 
                }
            }

            // return the target element
            return target;
        }

        function validateOpenCases(sendEmail)
        {
            doIt = true;
            oc = getInputEndingWith("OpenCase").value;

            alert(oc);

            if (oc === "true") {
                doIt = confirm('Are you sure?'); 
            }
            if (doIt) {
                // do stuff
            }
            else {
                // do nothing
            }
        }
    </script>

    <apex:form>
        <apex:outputpanel>
            <apex:inputhidden id="OpenCase" value="{!openCase}" />
        </apex:outputpanel>
        <input type="button" class="btn" onclick="validateOpenCases('Send');" value="Validate" />
    </apex:form>
</apex:page>