2016-09-02 4 views
0

Это веб-сайт онлайн-библиотеки, который я пытаюсь сделать. Для расширенного поиска, который может принимать несколько входов, я начинаю с массива всех публикаций, затем удаляю элементы, которые не соответствуют пользовательскому вводу. Это отлично работает в первый раз, когда массив сокращается до нужного массива. Поэтому, если кто-то набрал «программирование», будут показаны все публикации, имеющие программирование в их названии. Теперь, если пользователь снова нажимает кнопку «Предварительный поиск» на NavBar (как показано на приветствии.jsp), а входы говорят «UML», мой код выполнит поиск UML в сокращенном массиве, который содержит результаты только для «программирования» ». Я поставил оператор печати вышеJSP не повторное создание

SearchResult sr = new SearchResult(); sr.searchContains = publications;

(В контрольном сервлете) и печатает как для входов UML и программирования, но это, кажется, либо не создавать новый массив со всеми публикациями?

searchResult.jsp:

<c:forEach var="current" items="${sr.searchContains}"> Title: ${current.title} </c:forEach>

ControllerServlet.java:

if (action.equals("advSearch")) { 
      SearchResult sr = new SearchResult(); 
      sr.searchContains = publications; 

      nextPage = "searchResult.jsp"; 

      String titleString = request.getParameter("titleString"); 

      if (!titleString.equals("")){ 
       ArrayList<Publication> toRemove = new ArrayList<Publication>(); 
       for (Publication p : sr.searchContains){ 
        if (!p.title.contains(titleString)){ 
         toRemove.add(p); 
        } 
       } 
       sr.searchContains.removeAll(toRemove); 

      } 
request.getSession().setAttribute("sr", sr); 
      RequestDispatcher rd = request.getRequestDispatcher("/"+searchResult.jsp); 
      rd.forward(request, response); 

welcome.jsp:

<ul class="nav navbar-nav"> 
     <li class="active"><a href="advancedSearch.jsp">Advance Search <span class="sr-only">(current)</span></a></li> 
     </ul> 

advancedSearch.jsp:

<form action="controller" method="POST"> 
    <div class="form-group"> 
    <label for="title">Title:</label> 
    <input type="text" class="form-control" name="titleString"> 
    <input type="hidden" name="action" value="advSearch" /> 
    </div> 
<button type="submit" class="btn btn-default">Advanced Search</button> 
</form> 

SearchResult.jsp:

public class SearchResult { 
    public ArrayList<Publication> searchContains = new ArrayList<Publication>(); 

    public ArrayList<Publication> getSearchContains(){ 
     return this.searchContains; 
    } 
} 

ответ

0

Найдено решение, проблема была в controlservlet

SearchResult sr = new SearchResult(); 
sr.searchContains = publications; 

Это означает, что sr.searchContains это та же ссылка в качестве публикаций, основной массив.

Смежные вопросы