0

我编写了一个动态搜索页面来搜索自定义对象记录。我使用 SOQL 查询并将结果绑定到数据表。我需要根据返回的值更改其中一列的输出文本。

示例:如果 SOQL 返回“Tiger”,我需要显示“Animal”、Bird for eagle 等......

所以我想我的问题是我是否可以在 Apex:column 的 value 属性中使用 Javascript 函数?就像是:

 <apex:column value="renameObjectType({!mt.objectName__c})">

renameObjectType 函数类似于:

function renameObjectType(val) 
            {            
              var inputtextvalue=val.value;            

              if(inputtextvalue.length>0)
              {
                  if(inputtextvalue=="Tiger")
                  return "Animal";                  
              }

            };

这不像我想要的那样工作......这甚至可能吗?

谢谢,卡尔文

4

2 回答 2

1

这需要方便的包装类。JavaScript在 Visualforce 中的执行顺序可能会变得很棘手,因为无论如何在幕后发生了很多事情。如果您还没有,请在标准联系人详细信息页面上查看源代码,以了解浏览器端处理的进度。

对于此类事情,最安全、最快和最可预测的路径是 Apex,imo。

于 2012-04-15T22:18:42.000 回答
1

要意识到的一件事是,每次您从控制器中合并一个值(使用{!myApexVariable}语法)时,Visualforce 实际上都在为该变量调用 getter。

这意味着,每当您以这种方式合并变量时,您已经在调用一个函数。事实上,您可以“欺骗”Visualforce,使其简单地使用以下方法显示函数的值:

*My_VF_Page.page*

<apex:outputText value="{!MyFormattedValue}" />

*My_VF_Controller.apex*

public String getMyFormattedValue() {
    if (someOtherValue== null || someOtherValue== '') {
        return "N/A";
    }
    return someOtherValue;
}

加载 Visualforce 页面时您会注意到,getMyFormattedValue()每次页面需要获取有关MyFormattedValue. 我发现这个技巧对于输出函数的值非常有用。

于 2012-04-20T16:49:58.037 回答