當有多個Tab選項卡的時候,如果Java后端一次性傳值到前端頁面,第一次加載勢必會加載很慢,那么就需要分Tab卡片加載數據。
所以我的實現方式是,一個Tab選項卡代表一個頁面,然后通過Ajax請求到Java后端返回視圖到代表的選項卡頁面。回調整個頁面到父頁面中。
具體實現方法如下:
HTML如下:

1 <div class="portlet-body"> 2 3 <div class="tabbable-line"> 4 <input type="hidden" th:value="${index}" id="index"/> 5 <ul class="nav nav-tabs" id="tab"> 6 <li> 7 <a onclick="showTab(this,1)" data-toggle="tab">基本信息(BasicMation)</a> 8 </li> 9 <li class=""> 10 <a onclick="showTab(this,2)" data-toggle="tab">來往記錄(Record)</a> 11 </li> 12 <li class=""> 13 <a onclick="showTab(this,3)" data-toggle="tab">客戶反饋(CoupleBack)</a> 14 </li> 15 <li class=""> 16 <a onclick="showTab(this,4)" data-toggle="tab">聯系人(Contacts)</a> 17 </li> 18 <li> 19 <a href="#tab_1_2" data-toggle="tab">財務資料(Financial)</a> 20 </li> 21 <li> 22 <a href="#tab_1_3" data-toggle="tab">物流資料(Logistics)</a> 23 </li> 24 25 <li> 26 <a href="#tab_1_8" data-toggle="tab">資質要求(Require)</a> 27 </li> 28 <li> 29 <a href="#tab_1_12" data-toggle="tab">提醒記錄(Remind)</a> 30 </li> 31 </ul> 32 <div class="tab-content" id="content"> 33 //此處為子頁面回調渲染的地方 34 </div> 35 </div> 36 37 </div>
JS代碼如下:

1 function showTab(obj,index){ 2 var currentIndex = $("#index").val(); 3 $("#tab").children().eq(currentIndex-1).removeClass("active"); 4 $("#tab").children().eq(index-1).addClass("active"); 5 $("#index").val(index); 6 //基本資料 7 if(index==1){ 8 $.get("/client/basic",function (result) { 9 $("#content").html(""); 10 $("#content").html(result); 11 }) 12 } 13 //來訪記錄 14 else if(index==2){ 15 $.get("/client/records",function (result) { 16 $("#content").html(""); 17 $("#content").html(result); 18 }) 19 } 20 //客戶反饋 21 else if(index ==3){ 22 $.get("/client/feedback",function (result) { 23 $("#content").html(""); 24 $("#content").html(result); 25 }) 26 } 27 //聯系人信息 28 else if(index == 4){ 29 $.get("/client/contacts",function (result) { 30 $("#content").html(""); 31 $("#content").html(result); 32 }) 33 } 34 }
Java代碼如下(此處不一一寫完,點到為止。):

1 //基本信息 2 @RequestMapping(value = "/basic", method = RequestMethod.GET) 3 public String basic(ModelMap modelMap) { 4 modelMap.addAttribute("test", "fdskodsfnfisnfoibs"); 5 return "appmember/basicInformation"; 6 } 7 //來往記錄 8 @RequestMapping(value = "/records", method = RequestMethod.GET) 9 public String records(ModelMap modelMap) { 10 modelMap.addAttribute("test", "是你發咯吧"); 11 return "appmember/records"; 12 } 13 //反饋的信息 14 @RequestMapping(value = "/feedback", method = RequestMethod.GET) 15 public String feedback(ModelMap modelMap) { 16 modelMap.addAttribute("test", "是你發咯吧"); 17 return "appmember/feedback"; 18 }
Java中視圖指向地址為面板的子頁面,舉例如下:

1 <div class="tab-pane active" id="tab_1_1"> 2 <div class="alert alert-danger"> 3 <strong>此客戶對廠商或者產品有資質要求</strong> 4 </div> 5 <table class="table table-striped"> 6 <tr> 7 <Td>客戶名稱(ClientName):<a class="editable editable-click" th:text="${test}">武漢成錦源科貿有限公司</a></Td> 8 <Td>客戶簡稱(ClientAnotherNamer):<a class="editable editable-click">武漢成錦源</a></Td> 9 <Td>手機號碼(Phone):<a class="editable editable-click">18048877597</a></Td> 10 <Td>主聯系人(Contacts):<a class="editable editable-click">王定華</a></Td> 11 </tr> 12 <tr> 13 <Td>客戶類別(ClientType):<a class="editable editable-click">經銷商</a></Td> 14 <Td>客戶等級(ClientClass):<a class="editable editable-click">D+</a></Td> 15 <Td>客戶行業(ClientIndustry):<a class="editable editable-click">信息網絡</a></Td> 16 <Td>客戶性質(ClientNature):<a class="editable editable-click">國內客戶</a></Td> 17 </tr> 18 <tr> 19 20 <Td>大州(State):<a class="editable editable-click">中國</a></Td> 21 <Td>地區(Region):<a class="editable editable-click">華南</a></Td> 22 <Td>國家(Nation):<a class="editable editable-click">中國</a></Td> 23 <Td>省份&城市(Province):<a class="editable editable-click">廣東-深圳</a></Td> 24 </tr> 25 <tr> 26 <Td>公司主頁(CorporationPage):<a class="editable editable-click"></a></Td> 27 <Td>郵政編碼(MailCoding):<a class="editable editable-click"></a></Td> 28 <Td>關聯公司(RelevanceCorporation ):<a class="editable editable-click"></a></Td> 29 <Td>和關聯公司關系(CorporationRelation):<a class="editable editable-click"></a></Td> 30 </tr> 31 <tr> 32 <Td>經營范圍(ManageScope):<a class="editable editable-click"></a></Td> 33 <Td>客戶行業(ClientIndustry):<a class="editable editable-click"></a></Td> 34 <Td>客戶類別(ClientType):<a class="editable editable-click">集成集成</a></Td> 35 <Td>電源及插頭種類(PowerType):<a class="editable editable-click"></a></Td> 36 </tr> 37 <tr> 38 <Td>需求量(QuantityDemanded):<a class="editable editable-click">多</a></Td> 39 <Td>需求頻率(Requency):<a class="editable editable-click">一般</a></Td> 40 <Td>客戶當地時間(CurrentTime):<a class="editable editable-click"></a></Td> 41 <Td><a class="editable editable-click"></a></Td> 42 </tr> 43 <tr> 44 <td colspan="4"> 45 備注(Remark):<a class="editable editable-click">Empty</a></Td> 46 </td> 47 </tr> 48 </table> 49 </div>
因為最后是渲染到母版選項卡頁面的,所以只要div嵌入進去就好,其他的js,css無需在頁面子頁選項卡寫,渲染頁面時用的是母版選項卡的資源文件。
最后效果如下:
Java代碼為方便瀏覽,圖如下: