2012-01-19 15 views
1

私はspring 3とTiles 2(RESTfulではない)を使って構築されたwebappを持っています。私はクライアント側でダイナミックなフォームを持っている - 私は、ビューSpring 3とTiles 2のWebアプリケーションへのAjax REST呼び出し

私のアプリケーション-servlet.xml

<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" 
    xmlns:mvc="http://www.springframework.org/schema/mvc" 
    xsi:schemaLocation="http://www.springframework.org/schema/mvc 
         http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd 
         http://www.springframework.org/schema/context 
         http://www.springframework.org/schema/context/spring-context-3.0.xsd 
         http://www.springframework.org/schema/beans 
         http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"> 

    <mvc:annotation-driven /> 
    <mvc:resources mapping="/resources/**" location="/resources/" /> 

    <context:component-scan base-package="com.xxx.xxxx.xxxxx.web.controller" /> 

    <bean id="tilesConfigurer" class="org.springframework.web.servlet.view.tiles2.TilesConfigurer"> 
     <property name="definitions"> 
      <list> 
       <value>/WEB-INF/tiles.xml</value> 
      </list> 
     </property> 
    </bean> 


    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver" /> 

    <bean id="viewResolver" class="org.springframework.web.servlet.view.UrlBasedViewResolver"> 
     <property name="viewClass" value="org.springframework.web.servlet.view.tiles2.TilesView" /> 
    </bean> 

</beans> 

私tiles.xml

<tiles-definitions> 
    <definition name="base.definition" template="/WEB-INF/views/layout.jsp"> 
     <put-attribute name="header" value="/WEB-INF/views/header.jsp" /> 
     <put-attribute name="body" value="" /> 
     <put-attribute name="footer" value="/WEB-INF/views/footer.jsp" /> 
    </definition> 

    <definition name="welcome" extends="base.definition"> 
     <put-attribute name="body" value="/WEB-INF/views/welcome.jsp" /> 
    </definition> 
</tiles-definition> 

が今私の問題があるを表示するためにUrlBasedViewResolverを使用しています最初のドロップダウンボックスからオプションを選択すると、フォームの残りの部分を読み込むなどのように、ユーザーオプションに基づいてfly(JavaScriptを使用)で生成されます。私の最初のドロップダウンメニューでは、これらのオプションは定数なので問題はありません。私の2番目のドロップダウンメニューの選択のために私は特定の情報をロードする必要があり、サーバー上でしか利用できないので、私はAJAXコール(RESTful呼び出し)を作成すると考えたので、このようなコントローラを作成しました

my RESTfulコントローラ:

@Controller 
public class UtilsController { 

    private WebAdministration admin; 

    public UtilsController() throws WebAdministrationException { 
     this.admin = WebAdministration.getInstance(); 
    } 

    @RequestMapping(value="/aaaa/${site}/${type}", method=RequestMethod.GET, headers="Accept=text/xml, application/json") 
    public @ResponseBody List<String> getRemoteSites(@PathVariable("site") String site, @PathVariable("type") String type) { 
     List<String> remoteSites = null; 
     Config config = (Config) admin.getImplemantationData().get(Implementations.IMPL); 
     if (type.equals(Config.PERSISTENCE)) { 
      remoteSites = config.getRemoteSites().get(site).getNewRemoteSites(); 
     } 
     else if (type.equals(Config.OLD)) { 
      remoteSites = config.getRemoteSites().get(site).getOldRemoteSites(); 
     } 
     return remoteSites; 
    } 
} 

私のAJAX呼び出し:

<script type="text/javascript"> 
function getRemoteSites(site, type) { 
    $.getJSON('/aaaa/'+site+'/'+type, { 
     ajax : 'true' 
    }, function(data) { 
     var len = data.length; 
     for (var i = 0; i < len; i++) { 
      document.write('<form:checkbox path="remoteSites" value="' + valueArray[i] + '" />'); 
     } 
    }); 
}; 
</script> 

と私のAjaxリクエストは404で失敗 - 何のマッピングが見つかりませんでした。

どうすればRESTのURLを作成できますか?私は新しいビューリゾルバが必要であることを知っていますが、私は過去2日間、非常に多くのことを試み、正しい解決策を探しました。

助けてくださいか? $ .getJSON( '/ AAA ...)、コンテキストURLがあること、それに追加したしない - 私はあなたが要求しているURLがいることを確認 -

答えて

1

がここに完全にオフになるかもしれありがとうルートコンテキストを使用していない限り、あなたが404を取得している理由になる可能性があります。いずれにしても、私はspring:urlまたはc:urlを使用して変数にURLを取得し、その代わりに使用することをお勧めします。

<spring:url value="/aaaa/" var="myurl" /> 

アップデート1:あなたのRequestMappingを見てもう一度 -

@RequestMapping(value="/aaaa/${site}/${type}" 

正しくない、あなたはそれをこのように指定する必要があります - $記号なし:

@RequestMapping(value="/aaaa/{site}/{type}" 

もトレース・モードで実行し、Dispatcherサーブレットがこの変更を有効にしているかどうかを確認できますか。

+0

私はここにコンテキストURLは言及していませんでしたが、私は持っています。私はブラウザにURL全体を入れようとしましたが、何かを返すべきです、それは404と私の春はエラーを記録します[19.01.2012 20:16:14] WARN - (http-bio-8080-exec-3)org.springframework .web.servlet.DispatcherServlet.noHandlerFound(DispatcherServlet.java:947) - 名前が 'web-admin'のDispatcherServletのURI [/ web-spring/aaaaa/mySite/siteType]を持つHTTPリクエストのマッピングが見つかりませんでした。だから、私はURLが動作していないと確信している – tazo

+0

よろしく、ありがとう。あなたのパス変数に余分な$記号があるような私のポストルックに更新を加えました。 –

+0

ちょうどそれを修正しました。私はそれに気付かなかったことに驚いています。ありがとう – tazo

関連する問題