使用 Apex Repeat 填充 Visualforce Table

Using Apex Repeat to Populate a Visualforce Table

我的列表似乎是空白的,没有通过控制器扩展传递,或者某些问题导致我的 table 没有填充预期的数据。此 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'];
    }
}

我希望自定义控制器通过 apex repeat 然后显示在 table 中的工作订单行项目列表。相反,我得到一个空的 table.

您在不同范围内使用两种不同类型声明了变量 woli

在控制器层,woli是一个单一的WorkOrderLineItem成员变量:

public WorkOrderLineItem woli {get;set;}

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

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

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

此值在构造函数结束时超出范围,永远不会对您的页面可用。

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

无论您的 <apex:repeat> 当前是否编译(我不确定这是否合法或不符合我的想法),您应该将迭代变量更改为与绑定 属性:

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

您可能希望使控制器 属性 类似于 woliList 来说明。