【问题标题】:Using Apex Repeat to Populate a Visualforce Table使用 Apex 重复填充 Visualforce 表
【发布时间】:2019-08-25 18:07:38
【问题描述】:

我的列表似乎是空白的,没有通过控制器扩展或其他问题导致我的表无法填充预期的数据。正在从工作订单上的自定义按钮加载此 visualforce 页面。

我尝试使用以下方法填充数据: :ApexPages.CurrentPage().getParameters().get('id')

除了硬编码我认为是代码示例中显示的“id”之外。

VF页面如下:

<apex:page Standardcontroller="WorkOrder" extensions="cWOInvoice1" renderAs="pdf">
    <apex:form >

...

              <table style="...">
                  <tbody style="...">
                  <tr style="display:table-row;">
                      <th style="...">Scope of Work</th>
                      <th style="...">Trade</th>
                      <th style="...">Price</th>                       
                      </tr>
                      <apex:repeat value="{!woli}" var="woli">
                      <tr>
                          <td style = "...">{!woli.Repair_Product__r.Name}</td>
                          <td style = "...">{!woli.Repair_Product__r.Trade__c}</td>
                          <td style = "...">${!woli.Item_Price_Roll_Up_Sub__c}</td>

                          </tr>
                      </apex:repeat>

                  </tbody>
              </table>
...
        </body>

    </apex:form>

</apex:page>

控制器看起来像这样(再次硬编码 workOrderID 用于错误测试):

public class cWOInvoice1 {
    public WorkOrderLineItem woli {get;set;}
    public cWOInvoice1(ApexPages.StandardController controller){
        List<WorkOrderLineItem>woli=[SELECT Id, Area__c, Tenant_Responsible__c, WorkOrderId, Repair_Product__r.Name, Repair_Product__r.Bill_Rate_Retail__c, Repair_Product__r.Bill_Rate__c, Repair_Product__r.Trade__c FROM WorkOrderLineItem WHERE WorkOrderId='0WO55000000Cw4LGAS'];
    }
}

我希望自定义控制器通过工作订单行项目列表,然后顶点重复将显示在表格中。相反,我得到了一张空桌子。

【问题讨论】:

    标签: salesforce apex visualforce


    【解决方案1】:

    你有变量woli在不同的范围内声明了两种不同的类型。

    在控制器级别,woli 是单个 WorkOrderLineItem 成员变量:

    public WorkOrderLineItem woli {get;set;}
    

    因为它从未初始化,所以它的值为null

    在您的构造函数中,您将woli 重新声明为List&lt;WorkOrderLineItem&gt; 并对其进行初始化:

    public cWOInvoice1(ApexPages.StandardController controller){
        List<WorkOrderLineItem>woli=[SELECT Id, Area__c, Tenant_Responsible__c, WorkOrderId, Repair_Product__r.Name, Repair_Product__r.Bill_Rate_Retail__c, Repair_Product__r.Bill_Rate__c, Repair_Product__r.Trade__c FROM WorkOrderLineItem WHERE WorkOrderId='0WO55000000Cw4LGAS'];
    }
    

    此值在构造函数结束时超出范围,并且永远不会提供给您的页面。

    您需要删除局部声明并更正成员变量的类型。

    无论您的 &lt;apex:repeat&gt; 当前是否可以编译(我不确定这是否合法或不在我的脑海中),您应该将迭代变量更改为具有与绑定属性不同的名称:

    <apex:repeat value="{!woli}" var="woli">
    

    您可能希望使控制器属性类似于woliList 以进行澄清。

    【讨论】:

    • 非常感谢大卫!在构造函数中两次声明变量绝对是我的业余错误。我进行了您建议的更改并让自己遇到了一个新错误:)。我想学习一门新语言的乐趣。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-04-24
    • 2020-01-06
    • 2014-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多