Как правильно обмениваться данными между JavaScript, сервлетами Java и JSP? - PullRequest
0 голосов
/ 29 октября 2019

Я новичок в программировании, поэтому надеюсь, что опишу свою проблему как можно яснее.

Я занимаюсь разработкой WebApp VotingTool, который позволяет голосовать по набору требований , Пользователь не должен иметь возможность выбирать более 3 требований. Пользователь выбирает требование, щелкая по строке таблицы, которая получает класс с именем «highlight».

Теперь, если он щелкнетпри нажатии кнопки «Голосовать» запускается моя функция Javascript, показанная ниже, и пользователь должен получить сообщение в соответствии со своими голосами. Например, если он выбрал более 3 требований, он должен быть предупрежден, и его не следует перенаправлять. Но если он выбрал 3 требования, эти голоса должны быть показаны ему на другом JSP (/VoteResult.jsp "), а данные должны быть сохранены в базе данных.

Я отправляю массив javaScript, преобразованный в JSON черезAjax для моего сервлета Java, который затем анализирует этот JSON с GSON и проверяет длину массива в другом классе Java, а также устанавливает ответное сообщение на основе этого, которое отправляется в качестве ответа клиенту (javaScript).

Но как я могу перенаправить на JSP, как только длина станет равной 3. И установить результат. Обычно вы используете request.getRequestDispatcher("/VoteResult.jsp");, но я знаю, что это не тот же поток и поэтому работать не будет. вариант с пользователем JavaScript, но как я могу передать данные в этот JSP, поскольку я хочу показать, за какие требования проголосовал пользователь.

Вот мой код JavaScript:

function saveVotes() {

var table = $('#myTable').DataTable();
var rows = table.rows({selected: true}).data();
var votesCollection = [];

for (var i = 0; i < rows.length; i++) { 
    var currentRow = rows[i];     
    votesCollection.push(currentRow);
}

var voteJSON = JSON.stringify(votesCollection); 
var xmlhttp = new XMLHttpRequest();   // new HttpRequest instance 

$.ajax({
      url: 'saveVote',
      type: 'POST', 
      dataType: '',  
      data: voteJSON,
      success: function(response) {           
          if( response == "Successfull"){             
              break; 
          }           
          else{

              alert(response);

          }

      }
    }); }

А это мой метод Servlets doGet:

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    ServletContext sc = this.getServletContext();

    String jSon = request.getReader().lines().collect(Collectors.joining(System.lineSeparator()));
    //System.out.println(test);
    VoterSaver vs = new VoterSaver();
    vs.saveVotes(jSon);
    response.setContentType("text/plain");
    response.getWriter().append(vs.getClientMessage());

    request.getRequestDispatcher("/VoteResult.jsp");

}

Вызов этого класса Java:

    public void saveVotes(String JSON) throws IOException {


        Gson g = new Gson();

        JsonElement je = new JsonParser().parse(JSON);
        JsonArray jsonArray = je.getAsJsonArray();
        int counter = -1;
        List<ArrayList<String>> votesList = new ArrayList<ArrayList<String>>();
        switch (jsonArray.size()) {

        case 0:
            clientMessage =  "Please Select a Requirement!";
            break;
        case 1:
            clientMessage =  "Please select at least 3 Requirements";
            break;
        case 2:
            clientMessage = "Please select at least 3 Requirements";
            break;
        case 4:
        case 5:
        case 6:
        case 7:
        case 8:
            clientMessage = "Please select a Maximum of 3 Requirements!";
            break;              
        case 3:     
            clientMessage = "Successfull";
            for(JsonElement jsonElement : jsonArray) {
                counter++;
                List<String> individualVotes = new ArrayList<String>();
                JsonArray individualArray = jsonElement.getAsJsonArray();

                //Values in Array
                for ( int i = 0; i < individualArray.size(); i++) {
                    JsonElement value = individualArray.get(i);
                    individualVotes.add(value.getAsString());

                }

                votesList.add((ArrayList<String>) individualVotes);
                System.out.println(votesList.get(counter));
                }
            //System.out.println("Saved Votes Successfully!");
        }
    }

Какой самый лучший и самый профессиональный способ решения моей проблемы?

Надеюсь, что вы можете мне помочь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...