Я новичок в программировании, поэтому надеюсь, что опишу свою проблему как можно яснее.
Я занимаюсь разработкой 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!");
}
}
Какой самый лучший и самый профессиональный способ решения моей проблемы?
Надеюсь, что вы можете мне помочь.