bgomes:
Ola Edu,
Não sei se entendi bem sua pergunta, mas vale uma observação o request.getParameterValues("") retorna null se não encontrar no seu caso nenhum item selecionado.
Ou seu NullPointer ocorre mesmo que algum item de “musics” tenha sido selecionado ??
[]'s
eu preencho os três campos, deixo de selecionar uma opção e recebo NullPointerException ao passar um dispatcher para o view de exibição dos dados (outro .jsp). inserirei o código completo e um comentário no bloco de verificação do servlet:
o .jsp de entrada dos dados
<%@page import="business.User" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<!-- <script type = "text/javascript" src = "validateform.js"></script> -->
<title>Murach's Java Servlets and JSP</title>
</head>
<body>
<%
User user = (User) request.getAttribute("user");
String message = (String) request.getAttribute("message");
// handle null values
if(user == null)
user = new User();
if(message == null)
message = "";
%>
<h1>Join our email list</h1>
<p>To join our email list, enter your name and
email address below. <br>
Then, click on the Submit button.</p>
<p><i><%= message %></i></p>
<form action="AddToEmailList" method="POST">
<table cellspacing="5" border="0">
<tr>
<td align="right">First name:</td>
<td><input type="text" name="firstName" value ="<%= user.getFirstName()%>"></td>
</tr>
<tr>
<td align="right">Last name:</td>
<td><input type="text" name="lastName" value = "<%= user.getLastName()%>"></td>
</tr>
<tr>
<td align="right">Email address:</td>
<td><input type="text" name="emailAddress" value = "<%= user.getEmailAddress()%>"></td>
</tr>
<tr>
<td align="right">I'm interested in these types of music:</td>
<td>
<select name = "musics" multiple = "multiple">
<option value = "Rock">Rock</option>
<option value = "Country">Country</option>
<option value = "Bluegrass">Bluegrass</option>
<option value = "Folk">Folk</option>
</select>
</td>
</tr>
<tr>
<td></td>
<td><br><input type="submit" value="Submit"></td>
<!-- onclick = validate(this.form) -->
</tr>
</table>
</form>
</body>
</html>
O servlet que responderá ao pedido:
package devweb;
import java.io.IOException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import business.*;
import data.*;
/**
* Servlet implementation class AddToEmailListServlet
*/
public class AddToEmailListServlet extends HttpServlet {
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String firstName = request.getParameter("firstName");
String lastName = request.getParameter("lastName");
String emailAddress = request.getParameter("emailAddress");
String[] selectedMusics = request.getParameterValues("musics");
ServletContext context = getServletContext();
String path = context.getRealPath("/WEB-INF/emailList.txt");
String message = "";
String url = "";
// validating the parameters
/* o problema se encontra aqui:
não consigo fazer com que o usuário
tenha que selecionar um option do select
do .jsp acima mesmo verificando com a instrução
selectedMusics.length == 0
se alguma opção foi selecionada
*/
if(firstName.length() == 0 ||
lastName.length() == 0 ||
emailAddress.length() == 0 ||
selectedMusics.length == 0)
{
message = "Please fill all three text boxes and choose your favorites music genres";
url = "/join_email_list.jsp";
}
else {
url = "/display_music_choices.jsp";
}
User user = new User(firstName, lastName, emailAddress, selectedMusics);
UserIO.addRecord(user, path);
request.setAttribute("user", user);
request.setAttribute("message", message);
// forward request and response to the view
RequestDispatcher dispatcher = getServletContext().getRequestDispatcher(url);
dispatcher.forward(request, response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
}
o .jsp de exibição dos resultados
<!-- import packages and classes needed by the scripts -->
<%@ page import="business.*, data.*, java.util.Date" %>
<%@ include file="includes/header.html" %>
<%
// get attributes from the request
User user = (User) request.getAttribute("user");
%>
<h1>Thanks for joining our email list,
<%= user.getFirstName() %> <%= user.getLastName() %>
</h1>
<p>Here is the information that you entered:</p>
<table cellspacing="5" cellpadding="5" border="1">
<tr>
<td align="right">First name:</td>
<td><%= user.getFirstName() %></td>
</tr>
<tr>
<td align="right">Last name:</td>
<td><%= user.getLastName() %></td>
</tr>
<tr>
<td align="right">Email address:</td>
<td><%= user.getEmailAddress() %></td>
</tr>
</table>
<p>We'll use email to notify you whenever we have new releases for
these types of music: </p>
<%
String[] musicPreferences = user.getSelectedMusics();
for(int i = 0; i < musicPreferences.length; i++)
{
%>
<%= musicPreferences[i]%><br />
<%}%>
<p>To enter another email address, click on the Back <br>
button in your browser or the Return button shown <br>
below.</p>
<form action="join_email_list.jsp" method="get">
<input type="submit" value="Return">
</form>
<p>This email address was added to our list on <%= new Date() %></p>
</body>
</html>