0

我正在尝试为对象设计一个通用的详细信息页面。

在控制器类中,我找到了该对象的所有子关系的列表。

然后我想为找到的每个子关系创建,为了实现这一点,我必须在其中动态设置列表属性的值。

例如 :

<apex:relatedList subject={!ObjName} list="{!relatedListName}" />

但是这里的问题是 list 属性只接受 String 文字,所以不能实现它。请提出一种实现此要求的方法。

4

2 回答 2

3

是的,您可以在相关列表标签上动态设置“列表”属性的值,并且您可以通过 Dynamic Visualforce 执行此操作。这个问题已经在 Salesforce Stack exchange 上针对任何未来的浏览器提出并简明地回答:

https://salesforce.stackexchange.com/questions/7531/apexrelatedlist-list-dontexistinalorgs-c-only-solveable-with-dynamic

这是一般的解决方案:

在自定义控制器中,添加一个函数以动态生成相关列表标记。我将从您的措辞中假设您已经访问了控制器中的子关系的完整列表,因此为了在一个块中吐出所有列表,我将使用如下内容:

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)

巨大的成功!

于 2014-01-15T10:05:18.453 回答
1

我建议尝试使用apex:dataTableapex:repeat来构建您自己的列表显示。您可能需要一个包装类来处理将属性和值从 sObject 传递到页面。

于 2012-05-24T14:48:56.907 回答