2017-04-23 66 views
2

我有一個第一次使用項目列表調用的JSP頁面。 關於選擇下拉列表(選擇)我觸發AJAX代碼以獲得特定於所選選項的產品,並且我想用更相關的產品覆蓋產品列表。如何使用EL設置AJAX返回的列表和頁面上的列表引用使用EL

有沒有一種方法可以將其設置爲「$ {products}」,還是必須使用另一種方法,如隱藏該div標籤並顯示另一個方法。

我的JSP頁面

<div> 
    <c:forEach var="p" items="${products}"> 
    <table> 
     <td>p.name</td> 
     <td>p.description</td> 
    </table> 
    </c:forEach> 
<div> 

我的腳本

// Ajax... 
success: function(result) { 
    if (result.length > 0) { 
    // want to set the products list with the list returned 
    } 
} 

我的控制器

public List<Product> MyController() { 
    // ... 
    List<Product> products = prodcat.getList() 
    return products 
} 

回答

0

感謝您的回覆讓我告訴你我的做法。我使用了AJAX Jackson,並試圖將產品列表傳遞給視圖。在對象轉換中,我的產品(One)和評級(Many)之間存在雙向映射,因此它將進入無限循環,因爲它在產品中查找評級和產品評級。 我創建了另一個Model類,只設置了產品類所需的屬性,而不是發送產品列表。 所以最後我剛剛用我收到的新元素覆蓋了div標籤。

0

有兩種方法可以解決你的問題,但首先你應該知道,這兩個JSPel是服務器端技術,這意味着他們執行e在服務器端生成發送到客戶端的響應,以便在瀏覽器中呈現,因此在您的情況下,一旦產品表第一次在客戶端呈現,您將不得不使用一些JavaScript這是在客戶端執行的代碼刪除/替換該表內容

所以第一種方式是把該表在一個單獨的JSP文件(例如,products_view.jsp和 而不是返回products對象,則返回ModelAndView從您的控制器方法的對象:

控制器

@RequestMapping(method=RequestMethod.GET, value="/products_view") 
public ModelAndView MyController() { 
    // ... 
    List<Product> products = prodcat.getList(); 
    model.addAttribute("products", products); 
    return new ModelAndView("products_view"); 
} 

products_view.jsp

<div id="products_table"> 
    <table> 
    <c:forEach var="p" items="${products}"> 
     <tr> 
     <td>p.name</td> 
     <td>p.description</td> 
     </tr> 
    </c:forEach> 
    </table> 
<div> 

AJAX

// Ajax... 
success: function(result) { 
    if (result.length > 0) { 
    $("#products_table").html(response); 
    } 
} 

另一種方法是你從控制器返回產品列表的JSON或XML響應,然後填充將JSON響應放入客戶端的表格中,確保您的依存關係列表中有Jackson罐子

控制器

@RequestMapping(method=RequestMethod.GET, value="/products_view", produces="application/json") 
public @ResponseBody List<Product> MyController() 
    // ... 
    List<Product> products = prodcat.getList(); 
    return products ; 
} 

AJAX

// Ajax... 
dataType: "json", 
success: function(result) { 
    if (result.length > 0) { 
    var productTableHTML = '<table>'; 
    $.each(response, function (key,value) { 
     productTableHTML += 
     '<tr><td>' + key + '</td><td>' + value + '</td></tr>';  
    }); 
    productTableHTML += '</table>'; 
    $("#products_table").html(productTableHTML); 
    } 
}