3

我有一个 VF 页面,我在其中使用 apex:pageblocktable 来显示一堆记录。其中一列是选项列表,我需要根据选项列表上的选择显示/不显示字段。

 <apex:pageBlockTable value="{!showRecord}" var="item">
  <apex:column headerValue="Delivery">
    <apex:inputField value="{!item.delivery__c}"/>
  </apex:column>
  <apex:column headerValue="Roadway">
    <apex:inputField value="{!item.road__c}"/>
  </apex:column>
  <apex:column headerValue="Rail">
    <apex:inputField value="{!item.rail__c}"/>
  </apex:column>
 </apex:pageBlockTable>

在上面的代码中,delivery_c是带有道路和铁路值的选项列表。如果用户选择公路,那么我需要显示道路--c,如果用户选择铁路,那么我需要显示铁路_c

我该怎么做呢?

谢谢

4

1 回答 1

3

一种方法是在 Visualforce 中使用部分页面刷新。

将两个字段放在同一列中,并使用“rendered”属性使用 if 语句动态显示/隐藏字段。然后,您使用 actionSupport 标记为 delivery__c 字段设置 AJAX onchange 事件处理程序。这基本上会监听该字段的变化,然后刷新页面上的表格。每次刷新时,您的 if 语句都将被重新评估,并导致在该列中显示两个字段之一。

我没有机会尝试这个,但我认为它应该有效。

<apex:pageBlockTable id="mytable" value="{!showRecord}" var="item">
  <apex:column headerValue="Delivery">
    <apex:actionRegion>        
      <apex:inputField value="{!item.delivery__c}">
        <apex:actionSupport event="onchange" reRender="mytable">
      </apex:inputField>
    </apex:actionRegion>
  </apex:column>
  <apex:column headerValue="Delivery Type">
    <apex:inputField rendered="{!item.delivery__c='Road'}" value="{!item.road__c}"/>
    <apex:inputField rendered="{!item.delivery__c='Rail'}" value="{!item.rail__c}"/>
  </apex:column>
</apex:pageBlockTable>
于 2012-04-05T12:24:23.430 回答