0

いくつかの jqgrid を実行していますが、すべて正常に機能しています。ただし、検索を行うと、ページごとに 10 件の検索結果しか表示されません。結果が 10 件を超える場合は常に、ページ 2 をクリックしてもグリッドには影響しません。これが私のコントローラー アクションの 1 つです。検索が true である場合の if ステートメントに特に注意してください。

編集

何が問題を引き起こしているのかについての手がかりを見つけたかもしれないと思います。メイン グリッドの下にいくつかのサブグリッドがあることがわかります。私のJavaコードに関しては、object-Bのリストを持つobject-Aがある ため、AにはBのサブグリッドがあります。グリッドにフィードする json 文字列を作成する方法は、 Aに含まれるBのリストを反復処理することです。並べ替えや結果の制限など、ある種のクエリは作成しませんでした。

したがって、本当の問題は、コンテンツを好きなように配置および順序付けできるように、コレクションにファインダーを構築する方法であると思いますか?

これは、上記のBとして説明したエンティティの 1 つに対して呼び出しているアクションです。person.getContacts()と言ったところに特に注意してください

@RequestMapping(value = "contactjsondata/{pId}", method = RequestMethod.GET)
public @ResponseBody String contactjsondata(@PathVariable("pId") Long personId, Model uiModel, HttpServletRequest httpServletRequest) {
    Person person = Person.findPerson(personId);  
    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<Contact> contacts = new ArrayList<Contact>(person.getContacts());        
double tally = Math.ceil(contacts.size()/10.0d);
int totalPages = (int)tally;
int records = contacts.size();

    StringBuilder sb = new StringBuilder();
sb.append("{\"page\":\"").append(page).append("\", \"records\":\"").append(records).append("\", \"total\":\"").append(totalPages).append("\", \"rows\":[");
boolean first = true;
for (Contact c: contacts) {
    sb.append(first ? "" : ",");
    if (first) {
        first = false;
    }
    sb.append(String.format("{\"id\":\"%s\", \"cell\":[\"%s\", \"%s\", \"%s\"]}",c.getId(), c.getId(), c.getContactType().getName() ,c.getContactValue()));
}
sb.append("]}"); 
return sb.toString();
}
4

1 に答える 1

1

ページ付けの問題を修正するには、次のコードブロックを置き換える必要があります

for (Contact c: contacts) {
    sb.append(first ? "" : ",");
    if (first) {
        first = false;
    }
    sb.append(String.format("{\"id\":\"%s\", \"cell\":[\"%s\", \"%s\", \"%s\"]}",c.getId(), c.getId(), c.getContactType().getName() ,c.getContactValue()));
}  

と:

for (int i=limitStart; i<Math.min(records, limitStart+limitAmount); i++){
    Contact c = contacts[i];
    sb.append(first ? "" : ",");
    if (first) {
       first = false;
    }
    sb.append(String.format("{\"id\":\"%s\", \"cell\":[\"%s\", \"%s\", \"%s\"]}",c.getId(), c.getId(), c.getContactType().getName() ,c.getContactValue()));
}

もう1つのオプションは、loadonce:trueを使用して、jqGridにページ付けと並べ替えを処理させることです。この場合、上記の変更を行う必要はありません。

于 2012-06-27T17:40:37.367 に答える