我們在開發(fā)中,很難會遇見不提交表單的情況。常用的apex:commandButton,apex:commandLink,apex:actionFunction,apex:actionSupport。他們進行操作的時候,會將整個表單提交。但是我們很多時候的需求,只是希望提交一部分內(nèi)容,而不是全部。這個時候,我們就需要用到apex:actionRegion.

一.apex:actionRegion

apex:actionRegion為當一個ajax請求生成的時候,可以通過它來區(qū)分哪部分區(qū)域/組件可以應該被Force.com Service處理,只有在actionRegion內(nèi)部的組件元素被處理。

apex:actionRegion用于apex:form中涉及到表單提交指定區(qū)域塊或者組件的內(nèi)容,如果一個表單提交請求需要提交整個頁面,則不必使用apex:actionRegion。

 apex:actionRegion盡管可以用于ajax請求的時候,指定區(qū)域提交,但是卻無法定義請求完成后的reRender區(qū)域,reRender操作仍然在相關(guān)的控件的reRender部分來操作,即apex:actionRegion作用只在于提交表單時可以指定區(qū)域內(nèi)容來提交。

二.apex:actionSupport

actionSupport作用為當一個特定的事件被觸發(fā),比如單擊,失去焦點,鼠標移入等操作被觸發(fā)時,允許組件進行異步的刷新功能,常用場景為聯(lián)動,失去焦點后校驗在數(shù)據(jù)庫中是否唯一等。

 actionSupport和actionFunction在功能上很相像,不過有幾點小區(qū)別:

1.actionSupport是直接被其他的元素調(diào)用,actionFunction可以通過js調(diào)用,你可以在js中進行一些簡單的處理,也可以直接被其他元素調(diào)用;

2.actionSupport僅允許在單一的事件上調(diào)用action的method,actionFunction可以被多個事件調(diào)用。

 demo舉例:

 1.TestActionSupportController:設(shè)置一個testOptions變量,初始值是xxx,當調(diào)用changeOptions后變成yyy

iOS培訓,Swift培訓,蘋果開發(fā)培訓,移動開發(fā)培訓

 1 public with sharing class TestActionSupportController { 2      3     public Account acc{get;set;} 4  5     public String testListValue{get;set;} 6  7     public List<SelectOption> testOptions { 8         get { 9             if(testOptions == null) {10                 testOptions = new List<SelectOption>();11                 testOptions.add(new SelectOption('xxx','xxx'));12             }13             return testOptions;14         }set;15     }16 17     public void changeOptions() {18         testOptions = new List<SelectOption>();19         testOptions.add(new SelectOption('yyy','yyy'));20     }21 }

iOS培訓,Swift培訓,蘋果開發(fā)培訓,移動開發(fā)培訓

2.TestActionSupport.page:顯示一個必填輸入框以及一個下拉列表,下拉列表控制著另外一個下拉列表的顯示。

iOS培訓,Swift培訓,蘋果開發(fā)培訓,移動開發(fā)培訓

 1 <apex:page controller="TestActionSupportController"> 2     <apex:form id="theForm"> 3         <apex:inputField value="{!acc.Name}" required="true" style="padding-bottom: 5px;"/> 4         <br/> 5         <apex:outputPanel id="industryPanel" style="padding-bottom: 5px;"> 6             <apex:inputField value="{!acc.Industry}"/> 7             <apex:actionSupport event="onchange" action="{!changeOptions}" reRender="testSelectList"/> 8         </apex:outputPanel> 9         <apex:selectList value="{!testListValue}" id="testSelectList" style="margin-left: 5px;">10             <apex:selectOptions value="{!testOptions}">11             </apex:selectOptions>12         </apex:selectList>13     </apex:form>14 </apex:page>

iOS培訓,Swift培訓,蘋果開發(fā)培訓,移動開發(fā)培訓

 顯示效果如下:

iOS培訓,Swift培訓,蘋果開發(fā)培訓,移動開發(fā)培訓

其實上面的vf代碼是有問題的,當選擇了下拉框,右側(cè)的下拉框的值也不修改成yyy,原因是這樣的:

當actionSupport執(zhí)行時,會提交整個form表單,因為上面有一個required的字段,所以導致提交表單失敗,沒有走action對應的后臺的的method,所以沒有更新下拉框里面的值,這種情況有兩種可以修改的方式,1是將actionSuuport設(shè)置成immediate="true"方式,可以忽略表單的validation,第二種是使用actionRegion方式,這樣from表單提交時只提交actionRegion內(nèi)的數(shù)據(jù),從而避免了上面的尷尬,使用actionRegion方式修改如下:

iOS培訓,Swift培訓,蘋果開發(fā)培訓,移動開發(fā)培訓

 1 <apex:page controller="TestActionSupportController"> 2     <apex:form id="theForm"> 3         <apex:inputField value="{!acc.Name}" required="true" style="padding-bottom: 5px;"/> 4         <br/> 5         <apex:actionRegion> 6             <apex:outputPanel id="industryPanel" style="padding-bottom: 5px;"> 7                 <apex:inputField value="{!acc.Industry}"/> 8                 <apex:actionSupport event="onchange" action="{!changeOptions}" reRender="testSelectList"/> 9             </apex:outputPanel>10             <apex:selectList value="{!testListValue}" id="testSelectList" style="margin-left: 5px;">11                 <apex:selectOptions value="{!testOptions}">12                 </apex:selectOptions>13             </apex:selectList>14         </apex:actionRegion>15     </apex:form>16 </apex:page>

iOS培訓,Swift培訓,蘋果開發(fā)培訓,移動開發(fā)培訓

顯示效果:當更改下拉框的之,會修改成yyy

iOS培訓,Swift培訓,蘋果開發(fā)培訓,移動開發(fā)培訓

總結(jié):使用actionRegion和actionSupport可以更加靈活的提交表單,提升表單提交的性能。內(nèi)容描述錯誤的地方歡迎指出,有問題歡迎留言。

作者:zero

博客地址:http://www.cnblogs.com/zero-zyq/

本文歡迎轉(zhuǎn)載,但未經(jīng)作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接

個人下載了一些相關(guān)學習的PDF文件,如果需要下載請訪問百度云 點擊此處訪問 密碼:jhuy

如果文章的內(nèi)容對你有幫助,歡迎點贊~

http://www.cnblogs.com/zero-zyq/p/7070473.html