I am brand new to Java so please keep that in mind if this is a stupid or repeated question.
I have created a very simple jsp page(index.jsp) that has several text input fields where a user will input first and last names, a servlet that creates class instances(called Person) based on the input, saves them to an Array List and redirects to a second jsp page where the inputs are displayed.
Currently I have the "name" attribute in the input fields set to "nameN" on all input fields where N is the respective number:
<label for="name1">Name 1:</label><br>
<input type="text" required placeholder="Firstname Lastname" name="name1" id="name1">
<br>
<label for="name2">Name 2:</label><br>
<input type="text" required placeholder="Firstname Lastname" name="name2" id="name2">
<br>
<label for="name3">Name 3:</label><br>
<input type="text" required placeholder="Firstname Lastname" name="name3" id="name3">
<br>
...etc
and I'm able to iterate over them and create new class instances for each input field.
However, If I change the order of the inputs to something more 'random':
<label for="name5">Name 5:</label><br>
<input type="text" required placeholder="Firstname Lastname" name="name5" id="name5">
<br>
<label for="name3">Name 3:</label><br>
<input type="text" required placeholder="Firstname Lastname" name="name3" id="name3">
<br>
<label for="name1">Name 1:</label><br>
<input type="text" required placeholder="Firstname Lastname" name="name1" id="name1">
<br>
...
The objects are saved in the same order: name5, name3, name1 etc.
I'd like to have them sorted in order based on the name attribute. So it will always display "name1, name2, name3" regardless of the input order.
I figure a loop is my best bet but I can't figure out how to loop through user input fields and check if the info has been saved. Another option would be to do a comparison in the class itself but I can't seem to get that to work either.
Any help would be greatly appreciated.
Here is the relevant code:
index.jsp:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Sample Application JSP Page</title>
</head>
<body bgcolor=white>
<table border="0" cellpadding="10">
<tr>
<td align=center>
<img src="images/thumbs.jpg">
</td>
<td>
<h1>Sample Application JSP Page</h1>
</td>
</tr>
</table>
<br />
<form action="ReverseServlet" method="POST">
<!-- <h3>Please enter any text:</h3>
<input type="text" name="testText" id="testText">
<br>
<br> -->
<h3>Please enter names:</h3>
<label for="name5">Name 5:</label><br>
<input type="text" required placeholder="Firstname Lastname" name="name5" id="name5">
<br>
<label for="name3">Name 3:</label><br>
<input type="text" required placeholder="Firstname Lastname" name="name3" id="name3">
<br>
<label for="name4">Name 4:</label><br>
<input type="text" required placeholder="Firstname Lastname" name="name4" id="name4">
<br>
<label for="name6">Name 6:</label><br>
<input type="text" required placeholder="Firstname Lastname" name="name6" id="name6">
<br>
<label for="name1">Name 1:</label><br>
<input type="text" required placeholder="Firstname Lastname" name="name1" id="name1">
<br>
<label for="name8">Name 8:</label><br>
<input type="text" required placeholder="Firstname Lastname" name="name8" id="name8">
<br>
<label for="name2">Name 2:</label><br>
<input type="text" required placeholder="Firstname Lastname" name="name2" id="name2">
<br>
<label for="name7">Name 7:</label><br>
<input type="text" required placeholder="Firstname Lastname" name="name7" id="name7">
<br>
<input type="submit" value="Submit">
</form>
</body>
</html>
Person.java:
//Java Person class file
package examples;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.*;
import java.lang.*;
import static java.lang.System.*;
import java.io.*;
import java.util.*;
import java.util.Comparator;
import java.nio.charset.StandardCharsets;
public class Person implements Comparable{
private String firstName = null;
private String lastName = null;
//private static int nextIndex = 1;
private String index;
public Person(){
// index = nextIndex;
// nextIndex++;
}
public String getFirstName() {
return firstName;
}
public String getIndex() {
return index;
}
public String getLastName() {
return lastName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public void setIndex(String Index) {
this.index = index;
}
// public static Comparator<Person> PersonComparator = new Comparator<Person> {
// public int compare(Person p1, Person p2) {
// String PersonIndex1 = p1.getIndex().toUpperCase();
// String PersonIndex2 = p2.getIndex().toUpperCase();
// return PersonIndex1.compareTo(PersonIndex2);
// }
// }
@Override
public int compareTo(Person other){
String compareiId = ((Person)other).getIndex();
return this.Index - compareiId;
}
}
ReverseServlet.jsp
package examples;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Enumeration;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.*;
import java.lang.*;
import static java.lang.System.*;
import java.io.*;
import java.util.*;
import java.nio.charset.StandardCharsets;
public class ReverseServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String randText = request.getParameter("testText");
HttpSession session = request.getSession();
ArrayList<Person> names = new ArrayList<Person>();
/**
* ///////////////////////////////
* Code below goes through all input fields and
* creates a new class instance each time.
* Better than the for-loop because now the 'name'
* of the jsp element doesn't have to be "name",
* it can be numbered and it won't effect anything
* ///////////////////////////////
*/
int id = 1;
int something = id;
String strID = Integer.toString(something);
String el = "name".concat(strID);
Enumeration e = request.getParameterNames();
while(e.hasMoreElements()) {
Object obj = e.nextElement();
String fieldName = (String) obj;
String fieldValue = request.getParameter(fieldName);
String[] result = fieldValue.split(" ");
person.setFirstName(result[0]);
person.setLastName(result[1]);
names.add(person);
//++id;
// COME BACK TO THIS IF SORT DOESN'T WORK
// if(fieldName.equals("name" + strID)){
// Person person = new Person();
// String[] result = fieldValue.split(" ");
// person.setFirstName(result[0]);
// person.setLastName(result[1]);
// names.add(person);
// //names.add(person);
// ++id;
// }
}
Collections.sort(names, Person.PersonComparator);
session.setAttribute("testPerson", names);
response.sendRedirect ("hello.jsp");
}
}