Javascript Apex getter返回错误的值

Javascript Apex getter返回错误的值,javascript,salesforce,apex-code,Javascript,Salesforce,Apex Code,我在salesforce页面中有javascript函数来验证其中一个联系人是否有打开的案例。此函数调用apex getter以获取值。我面临的问题是apex getter总是返回错误的布尔值。我试着调试它,一切似乎都正常,但由于某种原因,返回的布尔值是错误的 顶点功能: public Boolean openCase{ get{ if (Contacts.size() > 0){ for(cContact wContact: dicCon

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

顶点功能:

 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{}

}
 function validateOpenCases(sendEmail){

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

 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{}

}
 function validateOpenCases(sendEmail){

    doIt = true;
    oc = {!openCase};   // <<== problem here
    alert(oc);
      if (oc)
      {
       doIt=confirm('blabla?');
      }
      if(doIt){
            // do stuff
      }
      else{
        // do nothing
      }
  }
函数验证封装(sendEmail){
doIt=true;

oc={!openCase};//您不应该直接在JavaScript中绑定Apex对象/变量(就像您有
{!openCase};
)。我以前在这方面遇到过很多问题。请改用或


更新 另一种选择是使用隐藏的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>

函数GetInputingWith(endsWith)
{
//组合一个新的正则表达式以匹配
//ID结尾,因为Salesforce将父ID前置到
//具有ID的所有元素
var r=new RegExp(“(.*”)+endsWith+“$”);
//获取所有输入元素
var inputs=document.getElementsByTagName('input');
//初始化目标
var目标;
//对于所有输入
对于(变量i=0;i
它应该是一个布尔否?我相信是这样“
var oc=openCase()
会更有意义的,依我看。我试过了,但没什么区别。我怎么用呢?我还是Salesforce的新手,没有找到很多JavaScript远程处理或Ajax工具包的例子。你能给我一个如何应用的提示吗?我刚刚意识到我提供的一个链接工作不正常,这里有一个更好的,我想t有一个例子:。这里也有一个Ajax工具包的例子:JavaScript远程处理对我来说不太好,因为我不得不将大多数变量设置为静态,这对我的应用程序来说不太好。谢谢。我有一个问题,什么是
myHiddenInput
,为什么你没有使用
getInputingWith(endsWith)中传递的参数
如果(/(.*)WidgetName$/g.exec(输入[i].id))
,它将用于什么。