2017-04-23 4 views
2

항목 목록이 처음으로 호출되는 JSP 페이지가 있습니다. 드롭 다운 (선택)을 선택하면 AJAX 코드가 트리거되어 선택한 옵션과 관련된 제품을 가져오고 관련 제품으로 제품 목록을 덮어 쓰려고합니다.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을 사용하여 view에 제품 목록을 전달하려고했습니다. My 제품 (One)과 Rating (Many) 간의 양방향 매핑이 암시 적으로 객체 변환에서 무한 루프로 바뀌 었습니다. 제품에서 등급을 찾았 기 때문입니다 및 평가에있는 제품. 다른 Model 클래스를 만들고 제품 목록을 보내는 대신 제품 클래스에서 필요한 속성 만 설정했습니다. 그래서 결국 div 태그를받은 새로운 요소로 덮어 썼습니다.

0

이 문제를 해결하는 방법은 두 가지가 있지만 먼저 알고 있어야 모두 JSPel은 서버 측 기술이므로 실행하는 것을 의미합니다. e를 서버 측에서 HTML 응답을 생성하여 브라우저에서 렌더링되도록 클라이언트 측에 전송하므로 제품 테이블이 클라이언트 측에서 처음 렌더링 된 후에는 JavaScript을 사용해야합니다. 클라이언트 측에서 실행되는 코드는 테이블 내용

그래서 첫 번째 방법은 (대신 products 객체를 반환하는 예를 들어, products_view.jsp 및 , 당신은 ModelAndView를 돌려 별도의 JSP 파일에 해당 테이블을 넣어하는 것입니다/제거로 대체합니다 컨트롤러 메서드의 객체 :

컨트롤러

@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 개의 jar가 있는지 확인하십시오.

,

컨트롤러

@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); 
    } 
}