我们可以动态设置<apex:relatedlist>组件的“list”属性的值吗?</apex:相关列表>

时间:2012-05-23 09:13:11

标签: apex-code visualforce

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

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

然后我想为找到的每个子关系创建,为了实现这一点,我将不得不动态设置list属性的值。

例如:

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

但问题是list属性只接受String literal,所以无法实现它。请建议一种方法来完成这项要求。

2 个答案:

答案 0 :(得分:3)

是的,您可以在相关列表标记上动态设置“list”属性的值,并通过Dynamic Visualforce执行此操作。此后,对于任何未来的浏览器,此问题已在Salesforce Stack交换中被问及并简要回答:

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

以下是一般解决方案:

在自定义控制器中,添加一个函数以动态生成RelatedList标记。我将从你的措辞中假设你已经访问了控制器中的子关系的完整列表,所以为了在一个块中吐出所有列表,我会使用这样的东西:

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;
}

在中间,您可以动态地将任何字符串设置为“List”值,并通过迭代字符串列表,一遍又一遍地添加相关列表对象。 (只需添加一个列表,删除for循环,并将“id”字符串值设置为您希望显示的特定关系。)

然后在您的visualforce页面上,您可以使用动态的visualforce标记渲染此块:

<apex:dynamicComponent componentValue="{!DynamicList}" />

(如您所知,公式值字段将自动挖掘吸气剂)

非常成功!

答案 1 :(得分:1)

我建议您尝试apex:dataTableapex:repeat来构建自己的列表显示。您可能需要wrapper class来处理从sObject到页面的传递属性和值。