我正在尝试为对象设计一个通用的详细信息页面。
在控制器类中,我找到了该对象的所有子关系的列表。
然后我想为找到的每个子关系创建,为了实现这一点,我必须在其中动态设置列表属性的值。
例如 :
<apex:relatedList subject={!ObjName} list="{!relatedListName}" />
但是这里的问题是 list 属性只接受 String 文字,所以不能实现它。请提出一种实现此要求的方法。
我正在尝试为对象设计一个通用的详细信息页面。
在控制器类中,我找到了该对象的所有子关系的列表。
然后我想为找到的每个子关系创建,为了实现这一点,我必须在其中动态设置列表属性的值。
例如 :
<apex:relatedList subject={!ObjName} list="{!relatedListName}" />
但是这里的问题是 list 属性只接受 String 文字,所以不能实现它。请提出一种实现此要求的方法。
是的,您可以在相关列表标签上动态设置“列表”属性的值,并且您可以通过 Dynamic Visualforce 执行此操作。这个问题已经在 Salesforce Stack exchange 上针对任何未来的浏览器提出并简明地回答:
这是一般的解决方案:
在自定义控制器中,添加一个函数以动态生成相关列表标记。我将从您的措辞中假设您已经访问了控制器中的子关系的完整列表,因此为了在一个块中吐出所有列表,我将使用如下内容:
public Component.Apex.OutputPanel getDynamicList()
{
Component.Apex.OutputPanel outPanel = new Component.Apex.OutputPanel();
for(String id : childNames) {
Component.Apex.RelatedList relList = new Component.Apex.RelatedList();
relList.list = id;
outPanel.childComponents.add(relList);
}
return outPanel;
}
在中间,您可以动态地将任何字符串设置为“列表”值,并且通过遍历字符串列表,您可以一遍又一遍地添加相关的列表对象。(要简单地添加一个列表,请删除 for 循环,并将“id”字符串值设置为您希望显示的任何特定关系)。
然后在您的 visualforce 页面上,您可以使用动态 visualforce 标签呈现此块:
<apex:dynamicComponent componentValue="{!DynamicList}" />
(你可能知道,公式值字段会自动挖掘 getter)
巨大的成功!
我建议尝试使用apex:dataTable或apex:repeat来构建您自己的列表显示。您可能需要一个包装类来处理将属性和值从 sObject 传递到页面。