2016-03-25 3 views
1

Я новичок в MVC и следующие this link У меня есть страница поиска для полученных pdf метаданных с помощью Solr. Мои, если заявление и петли в HTML стороне не работаютPlay Framework IF statement и цикл FOR

Searching.java в папке модели:

public class Searching { 

    public String q; 

    public String outputTitle; 
    public String outputAuthor; 
    public String outputContent; 
    public String outputPage; 
    public String outputPath; 

} 

функции поиска в Application.java:

final static Form<Searching> searchForm = form(Searching.class); 
    final static List<Searching> searchList = new ArrayList<Searching>(); 

public static Result search() { 
Form<Searching> filledForm = searchForm.bindFromRequest(); 
     Searching searched = filledForm.get(); 

....(database connection lines) 

QueryResponse response = solr.query(query); 
SolrDocumentList results = response.getResults(); 
    if(results.isEmpty()) 
       System.out.println("SEARCH NOT FOUND"); 
    else { 
     for (int i = 0; i < results.size(); ++i) { 

      searched.outputTitle = (String)results.get(i).getFirstValue("title"); 
      searched.outputAuthor = (String)results.get(i).getFirstValue("author"); 
      searched.outputPage =results.get(i).getFirstValue("pageNumber").toString(); 
      searched.outputContent = (String)results.get(i).getFirstValue("content"); 
      searched.outputPath = (String)results.get(i).getFirstValue("path");  
      searchList.add(searched); 
     } 
     System.out.println("\nresults.getNumFound(): "+ searched.outputFound); 
     System.out.println("results.size(): "+results.size()); 
     } 
    return play.mvc.Results.ok(search.render(searched, searchForm, searchList)); 
    } 

search.scala.html

@(searched: Searching, searchForm: Form[Searching], searchList: List[Searching]) 
.. some buttons,a search bar... 
@if(searchList.isEmpty()) { 
       <h1>Error</h1> 
      } else { 
       @for(search <- searchList) { 
       <ul>Title: @search.outputTitle</ul> 
       <ul>Author: @search.outputAuthor <a href="@search.outputPath" download>Download PDF</a></ul> 
       <ul>Number of Page(s): @search.outputPage</ul> 
       } 
      } 

Код Java работает хорошо. Я вижу выходные данные на терминале, но у моей стороны html есть проблема, и она показывает одну книгу много раз в соответствии с размером поискаList

+1

Вы должны действительно указать имена своих переменных и параметров. В любом случае параметр 'listForm: List [Search]', который вы используете для итерации в шаблоне, пуст. Либо заполнить список данными или перебрать что-то еще. – Anton

+0

Что вы имеете в виду под именами? Тогда я думаю, что мне нужно изменить внутри цикла в Application.java –

+1

Ну, именовав свой параметр 'listForm', а затем говоря, что он имеет тип' List [Search] ', на самом деле не интуитивно. Дело в том, что вы просто создаете статическое поле и передаете его в шаблон - конечно, он не будет содержать никаких данных. В Java-коде есть еще одна проблема - вы перебираете «результаты», но используете только одну переменную ('search') - таким образом вы всегда переписываете данные. – Anton

ответ

0

Я отправляю ответ явно, хотя я был в состоянии помочь OP в чате - возможно, кто-то еще сталкивается с такой проблемой, но не проверял чат:

Проблема в том, что у вас есть линия в цикле for, вы все еще используете одну и ту же переменную searched. Вам нужно будет повторно инициализировать переменную при входе в цикл. Что-то вроде:

for (...) { 
    searched = new Searching(); 
    searched.outputTitle = (String)results.get(i).getFirstValue("title"); 
    .... 
    searchList.add(searched); 
} 

Это решает проблему с дубликатами, и теперь все в порядке.