我写了一个动态搜索页面来搜索自定义对象记录。我使用 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()
。 我发现这个技巧对于输出函数的值非常有用。