#java #html #jsp #servlets
Вопрос:
Я создаю веб-страницу, на которой начинается список вакцин. Когда я нажимаю на ссылку, чтобы отредактировать конкретную запись вакцины в списке, это веб-страница, на которую попадают пользователи. Параметр id из этой записи передается на эту страницу. Нажатие на кнопку сохранить вызывает допост. когда я пытаюсь передать параметр id из doGet в новый объект vaccineEntry, значение id становится равным нулю.
Вот код сервлета для списка вакцин:
package vaccineList.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import NewVaccine.servlet.NewVaccine;
import NewDose.servlet.NewDose;
//import cs3220.model.GuestBookEntry;
//import cs3220.utilities.*;
@WebServlet(urlPatterns = "/ListVaccine", loadOnStartup = 1)
public class ListVaccine extends HttpServlet {
private static final long serialVersionUID = 1L;
public ListVaccine()
{
super();
}
public void init( ServletConfig config ) throws ServletException
{
super.init( config );
List<VaccineEntry> entries = new ArrayList<VaccineEntry>();
entries.add( new VaccineEntry( "Pfizer/BioNTech", "2", "21", "10000", "10000" ) );
entries.add( new VaccineEntry( "Johnsonamp;Johnson", "1", "0", "5000", "5000" ) );
getServletContext().setAttribute( ServletFunctions.VaccineEntries, entries );
}
@SuppressWarnings("unchecked")
protected void doGet( HttpServletRequest request,
HttpServletResponse response ) throws ServletException, IOException
{
StringBuilder html = new StringBuilder();
List<VaccineEntry> entries = ServletFunctions.getVaccineEntriesFromServletContext(getServletContext());
response.setContentType( "text/html" );
PrintWriter out = response.getWriter();
html.append( "<p>List Vaccine</p>" );
html.append( "<p><a href='NewVaccine'>New Vaccine</a> |" );
html.append( "<a href='NewDose'> New Dose</a></p>" );
html.append("<table border='1'>");
html.append("<tr>");
html.append( "<td> " " <b>Vaccine</b> </td>" );
html.append( "<td>" " <b>Doses Required</b></td>" );
html.append( "<td>" " <b>Days Between Doses</b></td>" );
html.append( "<td>" " <b>Total Doses Recieved</b></td>" );
html.append( "<td>" " <b>Total Doses Left</b></td>" );
html.append("<td></td>" );
html.append( "</tr>" );
for( VaccineEntry entry : entries )
{
html.append("<tr>");
html.append( "<td>" entry.getName() "</td>" );
html.append( "<td>" entry.getDosesReq() "</td>" );
if(entry.getDaysBtwnDoses() == "0") {
html.append( "<td></td>" );
}
else
html.append( "<td>" entry.getDaysBtwnDoses() "</td>" );
html.append( "<td>" entry.getTotalDosesRecieved() "</td>" );
html.append( "<td>" entry.getTotalDosesLeft() "</td>" );
html.append( "<td><a href='editVaccine?id=" entry.getId() "'>Edit</a></td>" );
html.append( "</td>" );
html.append( "</tr>" );
}
html.append( "</table>" );
out.println( ServletFunctions.titleWithBody("ListVaccine", html.toString()) );
}
}
и вот код для страницы editVaccine:
package EditVaccine.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import vaccineList.servlet.*;
@WebServlet("/editVaccine")
public class editVaccine extends HttpServlet {
private static final long serialVersionUID = 1L;
public editVaccine() {
super();
}
@SuppressWarnings("unchecked")
private VaccineEntry getEntry( int id )
{
List<VaccineEntry> entries = (List<VaccineEntry>) getServletContext()
.getAttribute( "entries" );
System.out.println("entry taken is " id);
for( VaccineEntry entry : entries )
if( entry.getId() == id ) return entry;
return null;
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
StringBuilder html = new StringBuilder();
String id = request.getParameter( "id" );
VaccineEntry entry = getEntry(Integer.parseInt(id));
System.out.println("The value of id is " id);
System.out.println("The value of getEntry is " entry.getId());
response.setContentType( "text/html" );
PrintWriter out = response.getWriter();
html.append("<form action='editVaccine' method='post'>" );
html.append("<table border='1' cellpadding='2'>");
html.append("<tr>" "<th colspan='2'>Name</th>");
html.append("<td><input type='text' name='name' value=" entry.getName() "></input></td>" "</tr>");
html.append("<tr><th colspan='2'>Doses Required</th>" "<td><select name='DosesReq' value='" entry.getDosesReq() "'>"); // id='Doses Required'
html.append("<option value='1' name='dosage' value='" entry.getDosesReq() "'>1</option>");
html.append("<option value='2' name='dosage' value='" entry.getDosesReq() "'>2</option>");
html.append("<option value='3' name='dosage' value='" entry.getDosesReq() "'>3</option>");
html.append("</select></td>");
html.append("<tr><th colspan='2'>Days Between Doses</th><td><input type='text' name= 'DaysBtwnDoses' value='" entry.getDaysBtwnDoses() "'> </input></td></tr>");
html.append("<td colspan = '2'><button>Save</button></td>");
html.append("</form>");
html.append("</table>");
out.println( ServletFunctions.titleWithBody("ListVaccine", html.toString()) );
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("In post method");
VaccineEntry entry = getEntry(Integer.parseInt(request.getParameter("id")));
entry.setName(request.getParameter("name"));
String name = entry.getName();
System.out.println("name is " name);
entry.setDosesReq(request.getParameter("dosage"));
String dosage = entry.getDosesReq();
System.out.println("dosage is " dosage);
entry.setDaysBtwnDoses(request.getParameter("DaysBtwnDoses"));
String DaysBtwnDoses = entry.getDaysBtwnDoses();
System.out.println("DaysBtwnDoses is " DaysBtwnDoses);
response.sendRedirect("ListVaccine");
return;
}
}
Комментарии:
1. Извините, это мой первый опубликованный вопрос о переполнении стека. Я не знаю, как это исправить.
2. Хорошо, спасибо тебе!
Ответ №1:
Вы должны передать id
параметр в своем запросе. В этом случае вы можете добавить его в качестве hidden
элемента формы, т. е.:
html.append("<input type='hidden' value='" id "' name='id' id='id' />")
Комментарии:
1. Большое вам спасибо! Хотя теперь я вижу, что у меня также возникла проблема с передачей значения требуемых доз в списке значений параметров методу доПост на странице editVaccine. Как я могу это сделать?
2. Атрибуты
select
имени элемента и идентификатора должны иметь то же имя, что и имя параметра, на которое вы ссылаетесьrequest.getParameter
(в вашем случае это дозировка ).