2012-03-26 1 views
1

私はjqgrid用のwikiをコーディネートしていますが、jqgridの検索ロジックを変更する方法はわかりません。検索のためのJqgridコントローラの調整

jqgridで指定されたURLと同じURLが検索されると仮定します。ここに私のjqgridによって呼び出されるアクションロジックがあります。私は春3.0とそのJavaコントローラを使用しています。

@RequestMapping(value = "studentjsondata", method = RequestMethod.GET) 
public @ResponseBody String studentjsondata(HttpServletRequest httpServletRequest) { 
    Format formatter = new SimpleDateFormat("MMMM dd, yyyy"); 
    String column = "id"; 
    if(httpServletRequest.getParameter("sidx") != null){ 
     column = httpServletRequest.getParameter("sidx"); 
    } 
    String orderType = "DESC"; 
    if(httpServletRequest.getParameter("sord") != null){ 
     orderType = httpServletRequest.getParameter("sord").toUpperCase(); 
    } 
    int page = 1; 
    if(Integer.parseInt(httpServletRequest.getParameter("page")) >= 1){ 
     page = Integer.parseInt(httpServletRequest.getParameter("page")); 
    } 
    int limitAmount = 10; 
    int limitStart = limitAmount*page - limitAmount; 
    List<Person> students = Person.findStudentPeopleOrderByColumn(true, column, orderType, limitStart, limitAmount).getResultList(); 

    long countStudents = Student.countStudents(); 

    double tally = Math.ceil(countStudents/10.0d); 
    int totalPages = (int)tally; 
    long records = countStudents; 


    StringBuilder sb = new StringBuilder(); 
    sb.append("{\"page\":\"").append(page).append("\", \"records\":\"").append(records).append("\", \"total\":\"").append(totalPages).append("\", \"rows\":["); 
    boolean first = true; 
    for (Person s: students) { 
     sb.append(first ? "" : ","); 
     if (first) { 
      first = false; 
     } 
     sb.append(String.format("{\"id\":\"%s\", \"cell\":[\"%s\", \"%s\", \"%s\", \"%s\", \"%s\", \"%s\"]}",s.getId(), s.getId(), s.getFirstName(), s.getLastName(), formatter.format(s.getDateOfBirth().getTime()), s.getGender(), s.getMaritalStatus())); 
    } 
    sb.append("]}"); 
    return sb.toString(); 
} 

、ここで私のnavGridのdeclerationはここ

$("#studentGrid").jqGrid('navGrid', "#pager", {edit:false,add:false,del:false,search:true},{ },{ },{ }, 
      { 
       sopt:['eq', 'ne', 'lt', 'gt', 'cn', 'bw', 'ew'], 
       closeOnEscape: true, 
       multipleSearch: true, 
       closeAfterSearch: true 
      } 
    ); 

である、それは検索がtrhe searchGridメソッドを使用して、デフォルトでは、あるとして私colModelとCOLNAMES

  colNames:['id','First Name', 'Last Name', 'Date Of Birth', 'Gender', 'Marital Status'], 
      colModel:[ 
       {name:'id',index:'id', width:15}, 
       {name:'firstName',index:'firstName', width:30, formoptions:{elmprefix:'(*) '}, editable:true, edittype: 'text', editrules:{required:true}}, 
       {name:'lastName',index:'lastName', width:30, formoptions:{elmprefix:'(*) '}, editable:true, edittype: 'text',editrules:{required:true}}, 
       {name:'dateOfBirth',index:'dateOfBirth', width:30, formoptions:{elmprefix:'(*) '},editrules:{required:true}, editable:true, edittype: 'text',    
        editoptions: { 
         dataInit: function(element) { 
          $(element).datepicker({dateFormat: 'MM dd, yy'}) 
         } 
        } 
       },      
       {name:'gender',index:'gender', width:30, formoptions:{elmprefix:'(*) '}, editable:true, editrules:{required:true}, edittype: 'select', 
        editoptions:{value:{}} 
       }, 
       {name:'maritalStatus',index:'maritalStatus', width:30, formoptions:{elmprefix:'(*) '}, editable:true, editrules:{required:true}, edittype: 'select', 
        editoptions:{value:{}} 
       }      
      ] 

です。ポストアレイでは_search: truefilters: {"groupOp":"AND","rules":[{"field":"firstName","op":"eq","data":"Anil"}]}が存在します。 searchField、searchOperおよびsearchStringはすべて空ですが、epost配列にあります。

検索を有効にするにはどうすればよいですか?

jsonパーサとフィルタ配列を使用してjsonをJavaに解析し、where句を追加してクエリを変更し、Jsonオブジェクトの値を使用する必要がありますか?

jqgridは、独自のデータオブジェクトを照会してサーバーに戻り、新しいクエリを起動しますか?

私は何をしなければならないか分からないので、何らかのガイダンスを提供してください。

+0

あなたのコードでは、 'httpServletRequest.getParameter(" filters ")'や 'httpServletRequest.getParameter(" _ search ")'のようなコードは表示されません。 – Oleg

+0

値をどうしたらいいのか分からないので、私はまだ変更を行っていません。私はそれを私のファインダーにargとして渡し、それをjsonという形でjavaに構文解析しますか?私は検索機能を有効にするためのアクションにどのパターンが通常使用されているのかよくわかりません。上記のように値にアクセスできます。 – Binaryrespawn

+0

私はこのページを見てきました。http://blog.brzezinka.eu/webmaster-tips/jquery/how-to-enable-the-search-functionality-in-jqgridどこでPHPで行われたのですか、これはjavaで行いますか?これは通常行われている方法ですか? – Binaryrespawn

答えて

1

私は自分自身で春ですが、the postには必要な情報が含まれているようです。一般的に

あなたはjqGridはhereを説明した形式のサーバーの追加パラメータfiltersに送信stringResult: trueで検索Advance Searchingダイアログ(multipleSearch: true)またはツールバーを使用している場合。 1つのパラメータfiltersには、複数のフィルタに関する情報を含めることができます。したがって、JSON文字列をオブジェクトに変換し、オブジェクトを分析してSELECTステートメントのWHERE部分のいくつかのkineを構築する必要があります。正確な実装は、評価するために使用するテクノロジによってデータベースに依存します。