2012-02-13 4 views
5

spring mvc 3.1、tiles 2、jqueryを使用して、私のWebサイトの部分レンダリングをしようとしています。SpringMVC、jquery、タイル、部分再レンダリング

<beans:bean class="org.springframework.js.ajax.AjaxUrlBasedViewResolver"> 
    <beans:property name="viewClass" value="org.springframework.js.ajax.tiles2.AjaxTilesView"/> 
</beans:bean> 

私のタイルがCONF:

は、ここに私の春のconfだ

<definition name="productSearch" extends="baseLayout"> 
    <put-attribute name="mainSection"> 
     <definition template="/WEB-INF/views/productSearch.jsp"> 
      <put-attribute name="productSearchResults" value="/WEB-INF/views/productSearchResults.jsp" /> 
     </definition> 
    </put-attribute> 
</definition> 

あなたが "productSearchResults" という名前のネストされた属性があります見たよう

。これは結果ページです。このページをajax経由で再レンダリングします。

マイコントローラ:

@RequestMapping(params = "search=true", value = "/", method = RequestMethod.POST) 
public String searchHandler(@Valid final SearchFormBean searchformBean, final Model model) { 
    model.addAttribute("productsList", productsService.findProducts(searchformBean.getSearchCriteria())); 
    return "productsSearch"; 
} 

私のJSP:

productsSearch.jsp:

<form:form id="product-search-form" method="post" modelAttribute="productSearchFormBean"> 
    <input type="hidden" name="search" value="" /> 
    <form:input path="searchCriteria.name" /> 
    // AND SOME OTHER FIELDS... 
    <button type="submit" onclick="this.form.search.value='true';">Search</button> 
</form> 

productSearchResults.jsp:

<div id="products-result"> 
    <div id="search-results-info" class="section-content"> 
      Order results : 
     <form:select path="searchCriteria.resultsSort"> 
      <form:option value="orderByName">Name</form:option> 
      <form:option value="orderByDame">Date</form:option> 
     </form:select> 
    </div> 

    <div id="products-content" class="section-content">     
     <c:forEach var="product" items="${productsList}"> 
      <article> 
       // PRODUCT INFORMATIONS DISPLAYED HERE... 
      </article> 
     </c:forEach> 
    </div> 
</div> 

、最終的に.jsファイルが含まprのoductSearch.jsp:だからここ

$('select[id="searchCriteria.resultsSort"]').change(function() { 
    $.ajax({ 
     type : "POST", 
     url : "/myapp/product/search/", 
     data : "search=true&fragments=productSearchResults", 
     success : function(response) { 
      $("#search-results").html(response); 
     }, 
     error : function(e) { 
      alert('Error : ' + e); 
     } 
    }); 
}); 

はことだ:私はproductsSearchResults.jspページに「searchCriteria.resultsSort」セレクタ値を変更するたびに、私は(結果のタイルを再読み込みしたいページ全体をリロードせず)。

上記のコードで、私はページ全体(HTMLタグを含む)を再描画しますが、興味のある部分だけではありません。

私の目標を達成するためのヒントはありますか?それは本当に可能ですか、部分的なレンダリングの原理を誤解しましたか?

$('select[id="searchCriteria.resultsSort"]').change(function() { 
$.ajax({ 
    type : "POST", 
    beforeSend : function(req) { 
     req.setRequestHeader("Accept", "text/html;type=ajax"); 
    }, 
    url : "/myapp/product/search/", 
    data : "search=true&fragments=productSearchResults", 
    success : function(response) { 
     $("#search-results").html(response); 
    }, 
    error : function(e) { 
     alert('Error : ' + e); 
    } 
}); 
}); 

をそして今、それが動作します:

答えて

4

は私が間違っていたものを見つけたので、私は自分の質問に答えるよ...

は、私はちょうどこのにJavaScriptコードを変更しました!

部分再レンダリングが原因で、ページが画面に読み込まれた後、「searchCriteria.resultsSort」セレクタがフォームにマップされなくなったように見えるので、この行をコントローラ:

model.addAttribute("searchCriteria", searchformBean.getSearchCriteria()); 

他の人に役立つことを願っています。

関連する問題