在拼接考試的試卷內容的時候,後台傳到controler中的變數是乙個list,也就是返回了乙個實體的list變數,出現了亂序。
現在用單選題來說明:
比如在資料庫中的第一列是試卷的型別(選擇題等),
第二列是難度等級,
第三列是該題的分數(單精度型別),
第四列是試卷型別的題幹(選擇題第一小題的題幹內容:....),
第五列是選項(a:..b:..c:..),
拼接出的試卷的內容就需要裡面的試題內容和選項倆個。
但是顯示在頁面的內容出現了本該出現questioncontent,卻出現了answer1的內容,本該是answer1的內容,卻出現的是answer2的內容。為什麼會出現這樣的亂序?
將實體轉換為list的過程中,需要經歷乙個將datetable轉換為list,很可能是封裝的這個datetabletolist有問題,無法區分int型別和單精度型別。在vs中新增監控,發現最開始的questionid(int型別)裡面有資料,而fraction(分數,單精度)沒有為null,很可能傳到頁面的資料的時候,自動的將資料進行了篩選,為空的fraction自動由有資料的questioncontent代替。所以,我覺得封裝的這個datetabletolist有問題。
但是將t_question表寫成viewmodel的形式,就這樣解決了。
實體是和資料庫進行互動的顯示。
viewmodel是一種用於封裝介面邏輯和操作邏輯的物件,他就是乙個檢視,我們很多時候都要在頁面顯示很多很多的實體的集合,就用它來顯示,即這個大檢視viewmodel中包含哪些資料,以什麼的方式呈現,檢視中包含哪些控制項,這些控制項會激發什麼的操作等,我們可以把viewmodel看做是dataset和各種控制項的容器。viewmodel一般不用於定義各種控制項最終顯示的布局,控制項的布局一般情況是通過我們的css、js、jsp來顯示。
viewmodel為什麼可以讓頁面序列化呢?
我們在寫viewmodel中打了很多的標籤,[datacontract] [serializable] 這些標籤有什麼的作用?
[serializable]:序列化,可以將物件例項的狀態儲存**的過程,在此過程中,先將物件的公共欄位和私有字段及其類的名稱轉換為位元組流,然後再講位元組流寫進去資料流。在隨後對物件進行反序列化時,將建立出於原物件完全相同的副本,物件是暫時儲存在記憶體中的,將物件儲存下來,這個過程就是序列化。
[datacontract] :服務契約,它定義了遠端訪問物件和可供呼叫的方法,資料契約則是服務端和客戶端之間要傳送的自定義資料型別,一旦宣告了這個型別,該型別可以在被序列化在服務端和客戶端傳送。因為有了它,我們的前台和後台的資料才有了保障。
學習是乙個不斷深入的過程。。。。。
FastJson亂序問題
jsonobject jsonordered new jsonobject true 2 將string物件轉換過程中,不要調整順序 jsonobject jsonordered jsonobject.parseobject jsonstring,feature.orderedfield 3 物件序...
CPU指令亂序執行問題
cpu為了提高指令執行效率,會在一條指令執行過程中 比如去記憶體讀資料 慢100倍 去同時執行另一條指令,前提是,兩條指令沒有依賴關係 寫操作也可以進行合併 硬體記憶體屏障 x86 sfence store 在sfence指令前的寫操作當必須在sfence指令後的寫操作前完成。lfence load...
簡單說 CPU亂序問題
在cpu中,有著幾層結構,每層結構的讀寫速度差異很大,cpu為了提高效能,可能會對原來的指令進行重新排序,具體可以參考文章 讀亂序 如果乙個cpu在讀取資料的時候快取不能命中,那麼必須要到主存中取,在cpu到主存,再從主存返回cpu的這段時間裡,相對於cpu來說,可以執行上百條指令了,如果cpu空閒...