日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Salesforce视图与控制器之间的交互

發(fā)布時間:2025/3/21 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Salesforce视图与控制器之间的交互 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

剛接觸Salesforce,過程的確是比較艱難了,中文資料幾乎沒有,看英文資料學的效率卻不高,不過看了一段時間的英文資料發(fā)現(xiàn)自己英語水平挺高不少啊,現(xiàn)在看都不用工具翻譯,早知道就再次嘗試報個6級,看下能過不,嘻嘻。。。。Salesforce的開發(fā)也是MVC模式,asp.net的MVC就玩的比較多了,換個平臺一下子沒適應過來,不過原理都一樣,接下來就介紹一下最近的學習成果吧,來看一下SF中MVC模式下視圖與控制器之間的交互,先貼控制器和視圖的代碼,下面有詳細講解。

apex視圖代碼如下:

<apex:page Controller="SendMessageController"> <apex:stylesheet value="{!URLFOR($Resource.jQuery, 'jquery-ui.css')}" /><apex:stylesheet value="{!URLFOR($Resource.jQuery, 'mystyle.css')}" /><apex:includeScript value="{!URLFOR($Resource.jQuery, 'jquery-2.1.1.min.js')}"/><apex:includeScript value="{!URLFOR($Resource.jQuery, 'jquery-ui.js')}"/> <apex:form ><apex:pageBlock title="視圖與控制器的交互"><apex:pageBlockSection title="Ajax請求提示區(qū)"><apex:outputPanel ><apex:actionStatus startStyle="font-size:40px;color:red;" stopStyle="font-size:30px;" startText="正在添加" id="adding" stopText="添加完成"/></apex:outputPanel><apex:outputPanel ><apex:actionStatus startStyle="font-size:40px;color:red;" stopStyle="font-size:30px;" startText="正在刪除" id="deleting" stopText="刪除完成"/></apex:outputPanel></apex:pageBlockSection><apex:pageBlockSection title="功能區(qū)"><input type="button" onclick="OpenDialog()" id="addUser" value="選擇微信用戶(按鈕)"/><apex:outputPanel id="AjaxBlock"><apex:variable value="{!0}" var="rowNum"/><apex:pageBlockTable value="{!wechatuserList}" var="wu"><apex:column headerValue="序號"><apex:outputText value="{0}"><apex:param value="{!rowNum+1}"/></apex:outputText></apex:column><apex:column headerValue="操作"><apex:commandLink value="刪除" action="{!deleteRow}" reRender="AjaxBlock" status="deleting" style="color:blue"><apex:param name="rowIndex" value="{!rowNum}"/></apex:commandLink></apex:column><apex:column headerValue="昵稱"><apex:outputField value="{!wu.Name}"/></apex:column><apex:column headerValue="微信號"><apex:variable var="rowNum" value="{!rowNum+1}"/><apex:outputField value="{!wu.openid__c}"/></apex:column><apex:column headerValue="是否有效"><apex:outputField value="{!wu.validornot__c}"/></apex:column></apex:pageBlockTable></apex:outputPanel></apex:pageBlockSection></apex:pageBlock><apex:actionfunction reRender="AjaxBlock" status="adding" immediate="true" action="{!GetChoose}" name="GetChoose" ><apex:param name="ChooseParam" assignTo="{!Choose}" value=""/></apex:actionfunction><div id="SelectWechatUser" style="height:470px;overflow-Y:auto;"><apex:outputPanel ><input type="button" value="確認選擇" onclick="ComfirmChoost()" class="btn"/></apex:outputPanel><apex:pageBlock ><apex:variable value="{!0}" var="rowNum2"/><apex:pageBlockTable value="{!GetUserList}" var="glist"><apex:column headerValue="選擇" style="width:5%"><input type="checkBox" value="{!glist.Id}" name="checkedPro"/></apex:column><apex:column headerValue="序號" style="width:5%;text-align:center;"><apex:outputText value="{0}" ><apex:param value="{!rowNum2+1}"/></apex:outputText></apex:column><apex:column headerValue="昵稱" style="width:30%"><apex:outputField value="{!glist.Name}" style="width:100%"/></apex:column><apex:column headerValue="微信號" style="width:30%"><apex:outputField value="{!glist.openid__c}" style="width:100%"/><apex:variable var="rowNum2" value="{!rowNum2+1}"/></apex:column><apex:column headerValue="是否有效" style="width:30%"><apex:outputField value="{!glist.validornot__c}" style="width:100%"/></apex:column></apex:pageBlockTable></apex:pageBlock></div> </apex:form><script>var dialog;$(function () {dialog=jQuery("#SelectWechatUser").dialog({autoOpen: false,height:550,width: 900,modal: true});});function OpenDialog(){jQuery("#SelectWechatUser").dialog("open");}function ComfirmChoost(){var choose=[];var allPro=document.getElementsByName("checkedPro");for(var i=0;i<allPro.length;i++){if(allPro[i].checked){choose.push(allPro[i].value);}}if(choose.length==0){alert("請選擇微信用戶");return;}else{jQuery("#SelectWechatUser").dialog("close");GetChoose(choose.join(';'));}}</script> </apex:page>

然后下面是控制器的代碼:

public class SendMessageController {public List<wechatuser__c> GetUserList { get; set; }public String Choose{get;set;}public List<String> chooseIds{get;set;}public List<wechatuser__c> wechatuserList { get; set; }public SendMessageController(){wechatuserList=new List<wechatuser__c>();GetUserList=[select id,Name,openid__c,validornot__c from wechatuser__c];}public void GetChoose(){ if(Choose !=null ){chooseIds = Choose.split(';');System.Debug('長度:'+wechatuserList.size());for(wechatuser__c model : [select id,Name,openid__c,validornot__c from wechatuser__c WHERE id IN :chooseIds]){ wechatuserList.add(model); }System.Debug('長度:'+wechatuserList.size());}}public void deleteRow() {Integer rowIndex;rowIndex = Integer.valueOf(ApexPages.currentPage().getParameters().get('rowIndex'));wechatuserList.remove(rowIndex);} }

大概效果圖就如下:

大致描述下這個頁面和控制器做了什么,首先點擊選擇微信用戶,然后出現(xiàn)一個dialog選擇框(jQuery ui風格),選上對應的微信用戶后,便會在上圖右下角出現(xiàn)對應的選擇,點擊刪除操作,便會刪除掉對應行,在向控制器get數(shù)據(jù)和post請求的時候(Ajax),請求的時候在請求提示區(qū)會有對應的正在請求數(shù)據(jù)的提示。整個過程都是AJAX,卻完全不是用js做到的,相當方便,當然也支持通過js去完成,最后也大致說明下。

當點擊選擇微信號按鈕出現(xiàn)一個dialog,這個就不多講,直接js打開,只不過前面需要引用jquery ui的js和css

dialog的代碼是這樣構成的。

<div id="SelectWechatUser" style="height:470px;overflow-Y:auto;"><apex:outputPanel ><input type="button" value="確認選擇" onclick="ComfirmChoost()" class="btn"/></apex:outputPanel><apex:pageBlock ><apex:variable value="{!0}" var="rowNum2"/><apex:pageBlockTable value="{!GetUserList}" var="glist"><apex:column headerValue="選擇" style="width:5%"><input type="checkBox" value="{!glist.Id}" name="checkedPro"/></apex:column><apex:column headerValue="序號" style="width:5%;text-align:center;"><apex:outputText value="{0}" ><apex:param value="{!rowNum2+1}"/></apex:outputText></apex:column><apex:column headerValue="昵稱" style="width:30%"><apex:outputField value="{!glist.Name}" style="width:100%"/></apex:column><apex:column headerValue="微信號" style="width:30%"><apex:outputField value="{!glist.openid__c}" style="width:100%"/><apex:variable var="rowNum2" value="{!rowNum2+1}"/></apex:column><apex:column headerValue="是否有效" style="width:30%"><apex:outputField value="{!glist.validornot__c}" style="width:100%"/></apex:column></apex:pageBlockTable></apex:pageBlock></div>

apex中是通過上面這樣的寫法進行數(shù)據(jù)填充的,其中<apex:pageBlockTable value="{!GetUserList}" var="glist">?? value中的值便是對應到控制器中的GetUserList,這個變量類型是List<wechatuser__c>,所以當頁面加載完的時候,如果GetUserList有值的話,便會循環(huán)填充滿pageBlockTable了,控制器在構造函數(shù)中便已經(jīng)查了數(shù)據(jù)庫,并賦值在這個變量中,另外<apex:variable value="{!0}" var="rowNum2"/>這個我個人理解是一個會根據(jù)pageBlockTable中記錄條數(shù),進行遞增的一個變量,這里我就用來給每條記錄一個序號,刪除對應的行也是通過這個變量去取得rowIndex來操作的。另一個pageBlockTable的原理也是一樣的。

????? 在打開的dialog對話框選擇了對應的條目后,js便把選擇了的id傳到控制器,使用的是actionfunction

<apex:actionfunction reRender="AjaxBlock" status="adding" immediate="true" action="{!GetChoose}" name="GetChoose" ><apex:param name="ChooseParam" assignTo="{!Choose}" value=""/></apex:actionfunction>

在actionfunction中可以定義apex: param 參數(shù)傳遞過去,而assignTo這個attribute則是對應到了控制器里面的Choose變量,變量有get和set方法,這樣,當調用GetChoose(choose.join(';')) 便把想傳遞的參數(shù)直接到了控制器里面的Choose去,這里是我個人覺得挺有趣的。緊接著便是調用數(shù)據(jù)庫把對應記錄查出來,然后wechatuserList.add(model); 這樣視圖這邊便會刷新AjaxBlock中的數(shù)據(jù),這里就要注意了,如果你覺得僅僅更新wechatuserList便會讓視圖綁定了這個變量的table也進行刷新的話,你就錯了,沒有進行過處理的話,是會刷新整個頁面,那么頁面是新的,數(shù)據(jù)也就是新的了,剛才傳過去的id數(shù)據(jù)也對應丟失,這樣當然不是我們想要的。

???? 在ajax請求的過程中,如果實現(xiàn) 1.讓用戶知道正在請求數(shù)據(jù),頁面不刷新? 2.請求完后,僅僅刷新想要刷新的部分呢。 第一個問題:在actionfunction中不是有一個status屬性嗎,注意看 它對應的是

<apex:outputPanel ><apex:actionStatus startStyle="font-size:40px;color:red;" stopStyle="font-size:30px;" startText="正在添加" id="adding" stopText="添加完成"/></apex:outputPanel>

看屬性也就很明顯,在Ajax請求過程中status屬性是用來通知用戶瀏覽器正在請求某個操作(如果網(wǎng)絡卡的話,不卡當然這個信息也不會看到),startText和stopText的值便是通過改變對應的值來告知ajax請求的過程和完成的狀態(tài)。問題二:對于actionfunction中的reRender屬性,便是指定需要ajax刷新的區(qū)域,類似這個例子,考慮ajax請求完成后,更新了wechatuserList的值,而視圖中的pageBlockTable剛好綁定了這個變量,如此,ajax請求完后,我們希望刷新這個pageBlockTable來顯示最新的狀態(tài),于是我用一個div或者ouputPanel來包住這個table,然后賦值一個id,再把這個id給到actionfunction的attribute? reRender。這樣,在actionfunction執(zhí)行完后,便會刷新對應的區(qū)域,實現(xiàn)了Ajax的請求。

???? 一樣的道理,點擊commandLink 帶上了apex: param 參數(shù),帶上需要刪除的行rowIndex,在點擊了刪除按鈕后,也是刪除List<wechatuser__c>的值,然后ajax刷新AjaxBlock。

???? 總結一下,當視圖需要訪問控制器的某個方法或者變量(變量需要get和set),只需要{!函數(shù)名(或者變量名)}? 這樣便可以訪問控制器,如果需要帶上參數(shù)便在標簽中帶上<apex: param>? 可以通過綁定控制器的變量和視圖中的pageblocktable來實現(xiàn)數(shù)據(jù)的同步,如果改變了對應的值,刷新視圖對應的部分便可以。當然除了這樣的方法實現(xiàn)控制器和視圖的通訊和Ajax請求,我們也可以通過js來完成,下面代碼便是在js中調用控制器的函數(shù),并在回調函數(shù)中進行對應的處理。

SendMessageController.AutoAjax(Param,function(result, event){if (event.status) { //這里是請求完成處理的事情} //這里是當請求狀態(tài)不正常(錯誤或者網(wǎng)絡延遲),處理區(qū)域 },{escape: true}//這個是html編碼的轉義開關,之前的一篇博客有講過);

js方法中SendMessageController便是控制器名,.后面的便是對應的方法名,控制器的方法前需要帶上@RemoteAction標簽,函數(shù)第一個便是傳過去的參數(shù),如果有多個參數(shù),用逗號隔開便可以,有function的便是回調函數(shù),最后那個是html轉義的標志,前面有講到,大概的控制器和視圖交互就是這樣,應該還不全,也是研究了一個星期的成果而已,后面再慢慢完善吧。

轉載于:https://www.cnblogs.com/xmfdsh/p/4511045.html

總結

以上是生活随笔為你收集整理的Salesforce视图与控制器之间的交互的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 免费一级黄| 国产精品美女www爽爽爽 | 伊人三级 | 欧美色图五月天 | 最新91视频 | 操你啦影院 | 免费看黄网站在线 | 久久人人爽人人爽人人片 | exo妈妈mv在线播放高清免费 | 亚洲av无码国产精品久久久久 | 色综合天天综合网国产成人网 | 国产不卡一 | 国产制服丝袜在线 | 亚洲一本在线观看 | 天天操天天摸天天干 | 久久久久久影院 | 天堂网国产 | 91久久久久久久久久久久 | 国产精选网站 | 乖女从小调教h尿便器小说 欧美韩一区二区 | 超级黄色录像 | 国产伊人av | a天堂在线 | 亚洲成人一级片 | av中文字幕免费在线观看 | 成人h片在线观看 | 国产精品久久亚洲 | 成人不卡av | 午夜国产福利在线观看 | 欧美影视一区 | 九九精品在线视频 | 国产免费一区二区三区免费视频 | 国产精品xxxxx | 国产农村妇女精品 | 国产无遮挡呻吟娇喘视频 | 人妻视频一区二区 | 日本中文字幕在线不卡 | 国产蜜臀在线 | 亚洲爱视频 | 国产白拍 | 日韩在线一二 | 一级特黄色大片 | 国产日韩欧美视频在线 | 99re6热在线精品视频播放 | 夜夜夜夜夜操 | 亚洲黄色成人 | 日韩欧美区| 一区二区三区四区五区六区 | 久久这里只有精品23 | 久久久久免费 | 97人人澡人人爽人人模亚洲 | 久草www| 国产激情在线视频 | va婷婷在线免费观看 | 色综合区 | 另类第一页 | 国产手机看片 | 在线观看中文字幕一区 | 亚洲精品久久久久久久久久久 | 中文字幕制服诱惑 | 欧美一卡二卡三卡 | 澳门色网| 午夜蜜桃视频 | 在线免费看黄色片 | 亚洲深夜av | 成人精品在线视频 | 国产伦理av | 国产精品无码毛片 | 国产xxxxxxxxx | 日本一区二区免费在线 | 夜夜视频 | 国产免费一区二区 | 国产成人精品一区在线播放 | a级片视频网站 | 在线免费视频你懂的 | 日本午夜激情视频 | 亚洲欧洲在线看 | 亚洲综合中文 | 狠狠干狠狠干狠狠干 | 性色欲网站人妻丰满中文久久不卡 | 边打电话边做 | 亚洲国产无 | 草草国产 | 91夫妻论坛 | 欧美 日韩 高清 | 99久久久无码国产精品不卡 | 伊人久久久久久久久 | 91视频综合网 | 我要看免费毛片 | 日韩人妻无码一区二区三区99 | 夏目彩春娇喘呻吟高潮迭起 | 日韩人成| 丰满av| 欧美精品国产一区 | 黄色小视频在线 | 日韩精品视频免费看 | 免费成人结看片 | 最新精品国产 | 另类激情视频 |