2011-11-03 7 views
1

私は困惑しています.DLLを使用してDIVをHTMLに変換したXMLで構成された.loadを使用してjQueryを呼び出していますが、 .getまたは$ .ajaxその件について)私は "400 Bad Request - クライアントから送られたリクエストが構文的に間違っていました"というメッセージを受け取ります。JQueryでdivにコンテンツをロードし、springが400の不正リクエストメッセージを返す

パラメータがすべてあり、パラメータのないページに対してテストコールを設定しても、同じメッセージが表示されます。これはすべて、注釈付きコントローラを使用してSpring(v3)を介して行われています。混乱しているのは、すでにJSONオブジェクトを返してSELECTを満たすWebサービスへの呼び出しで、この部分がうまく機能していることです。

DIVにHTMLを埋め込む方法を教えてください。

JavascriptをjQueryのコール:

 function doSearch() 
     { 
      var sUrl = "query.html"; 
      var sSecurityToken = '?st=' + $('#ihSecurityToken').val(); 

      var sProjects = ''; 
      $("#sltProjects option:selected").each(function() 
       { 
       sProjects += $(this).val() + ';'; 
       }); 
      sProjects = '&pn=' + escape(sProjects); 

      var sDatabases = ''; 
      $("#sltDatabases option:selected").each(function() 
       { 
       sDatabases += $(this).val() + ';'; 
       }); 
      sDatabases = '&db=' + escape(sDatabases); 

      var sQueryText = '&qt=' + escape($('#taSearchText').val()); 

      sSort = '&sr=' + $('#sltSort').val(); 
      sResultsPerPage = '&rp=' + $('#sltResultsPerPage').val(); 
      sRelevance = '&rl=' + $('#sltRelevance').val(); 

      var sFilters = '&ft='; 
      var sTemp = ''; 
      $("[id^=fld]").each(function() 
       { 
       sName = $(this).attr('alt'); 
       sValue = escape($(this).val()); 
       sTemp += escape((sName + '=' + sValue + ';')); 
       }); 

      if (sTemp.length) 
      { 
       sFilters += sTemp; 
      } 
      else 
      { 
       sFilters = ''; 
      } 

      var sStartingPage = "&sp=1"; 


      sFinal = sUrl + sSecurityToken + sProjects + sDatabases + sQueryText + sSort + sResultsPerPage + sRelevance + sFilters + sStartingPage; 
      $('#resultsBlock').load(sFinal); 
} 

コントローラーコード: パッケージenterprisesearch.web。

import java.io.IOException; 
import java.nio.charset.Charset; 
import java.util.Collection; 
import java.util.HashMap; 
import java.util.Map; 

import javax.servlet.http.HttpServletRequest; 
import javax.xml.parsers.ParserConfigurationException; 

import org.apache.commons.logging.Log; 
import org.apache.commons.logging.LogFactory; 
import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.http.HttpHeaders; 
import org.springframework.http.HttpStatus; 
import org.springframework.http.MediaType; 
import org.springframework.http.ResponseEntity; 
import org.springframework.http.converter.HttpMessageNotReadableException; 
import org.springframework.stereotype.Controller; 
import org.springframework.util.ClassUtils; 
import org.springframework.web.bind.annotation.ExceptionHandler; 
import org.springframework.web.bind.annotation.ModelAttribute; 
import org.springframework.web.bind.annotation.RequestMapping; 
import org.springframework.web.bind.annotation.RequestMethod; 
import org.springframework.web.bind.annotation.RequestParam; 
import org.springframework.web.bind.annotation.ResponseBody; 
import org.springframework.web.servlet.ModelAndView; 
import org.xml.sax.SAXException; 

import enterprisesearch.domain.DatabaseFilter; 
import enterprisesearch.domain.UserDatabaseProject; 
import enterprisesearch.domain.service.DouglasService; 
/** 
* @author bob 
* 
*/ 
@Controller 
public class SearchController 
{ 
    protected final Log logger = LogFactory.getLog(getClass()); 

    private DouglasService dgWebService = new DouglasService("http://localhost:8080/Douglas/services/Douglas"); 

    @RequestMapping("/search.html") 
    @ModelAttribute("message") 
    public String getMessage() 
    { 
     return "Results go here..."; 
    } 

    @ModelAttribute("username") 
    public String getUsername(@RequestParam(value="username", required=true) String psUsername) 
    { 
     return psUsername; 
    } 

    @ModelAttribute("securitytoken") 
    public String getSecurityToken(@RequestParam(value="username", required=true) String psUsername) 
    { 
     String sReturn = ""; 
     Map<String, String> mpResult = this.dgWebService.getSecurityToken(psUsername); 

     if (mpResult.containsValue("SUCCESS")) 
     { 
     sReturn = mpResult.get("securityinfo"); 
     } 
     else 
     { 
     sReturn = mpResult.get("errorid"); 
     } 

     return sReturn; 
    } 

    @ModelAttribute("userprojects") 
    public Collection<UserDatabaseProject> getUserProjects(@RequestParam(value="username", required=true) String psUsername) throws ParserConfigurationException, SAXException, IOException 
    { 
     String sUsername = ""; 
     if (psUsername == null || psUsername.isEmpty()) 
     { 
     sUsername = "lymana"; 
     } 
     else 
     { 
     sUsername = psUsername; 
     } 
     return this.dgWebService.getUserDatabaseProjects(sUsername); 
    } 

    @RequestMapping("/databases.html") 
    public @ResponseBody Map<String, String> getUserDatabases(@RequestParam(value="username", required=true) String psUsername, @RequestParam(value="projectname", required=true) String psProjectName) throws ParserConfigurationException, SAXException, IOException 
    { 
     Map<String, String> mpDatabases = new HashMap<String, String>(); 

     Collection<UserDatabaseProject> udpProjects = this.dgWebService.getUserDatabaseProjects(psUsername); 
     if (udpProjects.size() > 0) 
     { 
     for (UserDatabaseProject udpProject : udpProjects) 
     { 
      if (psProjectName.indexOf(udpProject.get_msProjectName()) != -1) 
      { 
       mpDatabases.put(udpProject.get_msDatabaseName(), udpProject.get_msDatabaseDescription()); 
      } 
     } 
     } 
     else 
     { 
     mpDatabases.put("","No databases were found for the selected project"); 
     } 

     return mpDatabases; 
    } 

    @RequestMapping("/filters.html") 
    public @ResponseBody Map<String, String> getCommonDBFilters(@RequestParam(value="databases", required=true) String psDatabaseNames) throws ParserConfigurationException, SAXException, IOException 
    { 
     Map<String, String> mpDatabases = new HashMap<String, String>(); 

     Collection<DatabaseFilter> dfFilters = this.dgWebService.getCommonDBFilters(psDatabaseNames); 
     if (dfFilters.size() > 0) 
     { 
     for (DatabaseFilter dfFilter : dfFilters) 
     { 
      if (psDatabaseNames.indexOf(dfFilter.get_msDatabaseName()) != -1) 
      { 
       mpDatabases.put(dfFilter.get_msFilterName(), dfFilter.get_msFilterName()); 
      } 
     } 
     } 
     else 
     { 
     mpDatabases.put("","No filters were found for the selected database(s)"); 
     } 

     return mpDatabases; 
    } 


    @RequestMapping("/test.html") 
    public ModelAndView execTest() 
    { 
     //Map<String, String> mpDatabases = new HashMap<String, String>(); 
     ModelAndView mavReturn = new ModelAndView("test.jsp"); 
     //mpDatabases.put("test","<b>No filters were found for the selected database(s)</b>"); 

     return mavReturn; 
    } 

    //@ModelAttribute("searchResults") 
/* @RequestMapping(value = "/query.html", method = RequestMethod.GET) 
    public ModelAndView doSearch(@RequestParam(value="st", required=true) String psSecurityToken, 
     @RequestParam(value="pn", required=true) String psProjects, 
     @RequestParam(value="db", required=true) String psDatabases, 
     @RequestParam(value="qt", required=true) String psQueryText, 
     @RequestParam(value="sr", required=true) String psSort, 
     @RequestParam(value="rp", required=true) String psResultsPerPage, 
     @RequestParam(value="rl", required=true) String psRelevance, 
     @RequestParam(value="sp", required=true) String psStartingPage, 
     @RequestParam(value="ft", required=false) String psFilters) 
    { 
     ModelAndView mavReturn = new ModelAndView("query.jsp"); 
     String sTemp = ""; 
     String sOptions = ""; 
     String sStartingPage = "1"; 
     if (!psStartingPage.isEmpty()) 
     { 
     sStartingPage = psStartingPage; 
     } 

     String sSort = "Sort=" + psSort; 
     String sResultsPerPage = "ResultsStart=" + sStartingPage + ";ResultsEnd=" + psResultsPerPage; 
     String sDatabases = "Repositories=" + psDatabases.replace(';', ','); 
     String sRelevance = "RelevanceMin=" + psRelevance; 
     String sDefaults = "Print=All;SummaryType=Context;Highlighting=Terms+SummaryTerms;"; 
     sOptions = sSort + ";" + sResultsPerPage + ";" + sDatabases + ";" + sRelevance + ";" + sDefaults; 

     //sReturn = this.dgWebService.executeTextQuery(psSecurityToken, psProjects, psDatabases, psQueryText, sOptions, psFilters); 
     sTemp = "<b>This is a test</b>"; 
     mavReturn.addObject("searchResults", sTemp); 
     return mavReturn; 
    }*/ 

    /*@RequestMapping(value = "/test.html", method = RequestMethod.GET) 
    public ModelAndView doTest(@RequestParam(value="st", required=true) String psSecurityToken) 
    { 
     String sTemp = ""; 
     ModelAndView mavReturn = new ModelAndView("test.jsp"); 

     //sReturn = this.dgWebService.executeTextQuery(psSecurityToken, psProjects, psDatabases, psQueryText, sOptions, psFilters); 
     sTemp = "<b>This is a test</b>"; 
     mavReturn.addObject("searchResults", sTemp); 
     return mavReturn; 
    }*/ 


} 

URL:

http://localhost:8085/EnterpriseSearch/query.html?st=kjahsdf9845hasfha9348uwhefas&pn=ECC%3B&db=dbECC%3B&qt=money&sr=relevance&rp=10&rl=90&sp=1&ft=false 

Firebugの情報:

Response Headersview source 
Server Apache-Coyote/1.1 
Content-Type text/html;charset=utf-8 
Content-Length 971 
Date Thu, 03 Nov 2011 20:06:56 GMT 
Connection close 
Request Headersview source 
Host localhost:8085 
User-Agent Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.23) Gecko/20110920    Firefox/3.6.23 
Accept text/html, */*; q=0.01 
Accept-Language en-us,en;q=0.5 
Accept-Encoding gzip,deflate 
Accept-Charset ISO-8859-1,utf-8;q=0.7,*;q=0.7 
Keep-Alive 115 
Connection keep-alive 
X-Requested-With XMLHttpRequest 
Referer http://localhost:8085/EnterpriseSearch/search.html?username=lymana 
Cookie JSESSIONID=CC30B029E8C9215489D4F938A6C1BB9D 

任意のアイデア?私は何が欠けていますか?

完全なコントローラコードを含むように更新されました。

答えて

1

JavaコードをコピーしてSpring 3.0テストアプリケーションに貼り付け、そのURLを手動でヒットしました。そのURLに直接当ると、同じ400が得られますか?

私は起こっていることがわかるいくつかの簡単な問題がありますが、あなたはすでにそれらを排除している可能性が高いです。私はちょうど知るあなたのメッセージを読む十分な情報がありません!

  1. RequestMapped関数から戻ってくる文字列に一致するビューがありますか?
  2. トレースメッセージを追加すると、doSearch関数()も呼び出されますか?
  3. エラーログには何もありますか?
  4. アクセスログとは何ですか?
+0

私が手動でURLにヒットした場合、同じエラーが発生します。 Hmm ... query.jspファイルはありますか?いいえ、私はそれが必要だとは思わなかった。 Sry Spring/JSPは私にとって新しいものです。 doSearch関数が呼び出されていて、ログに何も表示されません –

+0

その関数が呼び出されていますか?私はFreemarkerでSpringを使用しているので、JSPでどのように作業しているかを100%確信しているわけではありませんが、Stringコントローラ関数からの戻り値は、ユーザーに表示しているテンプレートの名前あなたのケースでは、AJAXingで) – Danalog

+0

http://static.springsource.org/spring/docs/3.0.x/javadoc-api/org/springframework/web/bind/annotation/RequestMapping.htmlをご覧の場合 文字列値は、ビュー名として解釈され、モデルは、コマンドオブジェクトおよびModelAttributeによって注釈付けされた参照データアクセサメソッドによって暗黙的に決定される。ハンドラメソッドは、ModelMap引数を宣言することによって、プログラムでモデルを充実させることもできます(上記参照)。 – Danalog

関連する問題