我正在尝试为对象设计一个通用的详细信息页面。
在控制器类中,我找到该对象的所有子关系列表。
然后我想为找到的每个子关系创建,为了实现这一点,我将不得不动态设置list属性的值。
例如:
<apex:relatedList subject={!ObjName} list="{!relatedListName}" />
但问题是list属性只接受String literal,所以无法实现它。请建议一种方法来完成这项要求。
答案 0 :(得分:3)
是的,您可以在相关列表标记上动态设置“list”属性的值,并通过Dynamic Visualforce执行此操作。此后,对于任何未来的浏览器,此问题已在Salesforce Stack交换中被问及并简要回答:
以下是一般解决方案:
在自定义控制器中,添加一个函数以动态生成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:dataTable或apex:repeat来构建自己的列表显示。您可能需要wrapper class来处理从sObject到页面的传递属性和值。