Visualforce -> "Apex:column" 的值属性可以调用函数来重新格式化正在显示的内容吗?



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

示例:如果 SOQL 返回"老虎",我需要显示"动物"、鹰的鸟等。

所以我想我的问题是我是否可以在 Apex:column 的值属性中使用 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";                  
              }
            };

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

谢谢加尔文

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

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

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

这意味着,每当您以这种方式合并变量时,您就已经在调用一个函数。 事实上,你可以"欺骗"Visualforce,让他们使用以下命令简单地显示函数的值:

*My_VF_Page页*

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

*My_VF_Controller.顶点*

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

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

最新更新