Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #59 da revista programar. Faz já o download aqui!

crislanio_macedo

Erro ao tentar usar o select box pra filtrar livro por categoria , jstl NullPointerException (não filtra as opções)

Mensagens Recomendadas

crislanio_macedo    0
crislanio_macedo

Tenho a seguinte página JSP. Minha intenção é filtrar os livros por categoria.

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="f"%>

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<html>
<head>
</head>
<body>
<c:import url="/includes/cabecalho.jsp" />

<h1>
	Listar Livros: <b>${tamanho}</b>
</h1>
<label>Buscar</label>
<div>
	<form action="buscarPorCategoria" method="POST">
		<select  name="categoria" required>
			<option selected value="aventura">Aventura</option>
			<option selected value="drama">Drama</option>
			<option selected value="comedia">Comédia</option>
		</select>
		 <input type="submit" value="Ok" /> <br /> <br />
	</form>
</div>

<table align="center" border="1px" width="80%">
	<thead>
		<tr>
			<th>Id</th>
			<th>Nome</th>
			<th>Valor</th>
			<th>Quantidade Estoque</th>
			<th>Categoria</th>
		</tr>
	</thead>
	<tbody>
		<c:forEach var="livro" items="${livros}">
			<tr ng-repeat="livro in livros">

				<td>${livro.id}</td>
				<td>${livro.nome}</td>
				<td>${livro.valor}</td>
				<td>${livro.qtdEstoque}</td>
				<td>${livro.categoria}</td>
			</tr>
		</c:forEach>
	</tbody>
</table>

<div class="linha">
	<section>
		<c:import url="/includes/secao_extra.jsp" />
		<footer>
			<c:import url="/includes/rodape.jsp" />
		</footer>
	</section>
</div>

 

Tenho o controller,

package br.ufc.controller;

import java.sql.Connection;
import java.sql.SQLException;
import java.util.List;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.validation.Valid;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.RequestMapping;

import br.ufc.dao.FabricaDeConexoes;
import br.ufc.dao.LivroDAO;
import br.ufc.model.Livro;

@Controller
public class LivroController{

@RequestMapping("formularioLivro")
public String formularioLivro() {
return "inserir_livro";
}

public String categoria(String categoria) {
FabricaDeConexoes fc = new FabricaDeConexoes();
Connection conn = fc.getConexao();
LivroDAO aDAO = new LivroDAO(conn);
Livro livro = new Livro();

String acao = new String();
acao = "aventura";
if (acao.equalsIgnoreCase("aventura")) {
livro.setCategoria("aventura");
livro.getCategoria();
aDAO.inserir(livro);
}

if (acao.equalsIgnoreCase("drama")) {
livro.setCategoria("drama");

livro.getCategoria();
aDAO.inserir(livro);
}
if (acao.equalsIgnoreCase("acao")) {
livro.setCategoria("acao");

livro.getCategoria();
aDAO.inserir(livro);
}
return "livro_adicionado";
}

@RequestMapping("buscarPorCategoria")
public String buscarPorCategoria(Livro livro) {
FabricaDeConexoes fc = new FabricaDeConexoes();
Connection conn = fc.getConexao();
LivroDAO aDAO = new LivroDAO(conn);

String acao = null;
if (acao.equalsIgnoreCase("aventura")) {
livro.setCategoria("aventura");
livro.getCategoria();
aDAO.buscar(livro.getCategoria());
}

if (acao.equalsIgnoreCase("drama")) {
livro.setCategoria("drama");

livro.getCategoria();
aDAO.buscar(livro.getCategoria());
}
if (acao.equalsIgnoreCase("acao")) {
livro.setCategoria("acao");

livro.getCategoria();
aDAO.buscar(livro.getCategoria());
}
return "buscar_livros";
}

@RequestMapping("adicionarLivro")
public String adicionarLivro(@Valid Livro livro, BindingResult result) {

if (result.hasErrors()) {
return "inserir_livro";
}

FabricaDeConexoes fc = new FabricaDeConexoes();
Connection conn = fc.getConexao();
LivroDAO aDAO = new LivroDAO(conn);

aDAO.inserir(livro);

try {
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

return "livro_adicionado";
}

@RequestMapping("listarLivro")
public String listarLivro(Model model) {

FabricaDeConexoes fc = new FabricaDeConexoes();
Connection conn = fc.getConexao();
LivroDAO uDAO = new LivroDAO(conn);

List livros = uDAO.getListar();
model.addAttribute("livros", livros);
model.addAttribute("tamanho", livros.size());

try {
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

return "listar_livros";
}

@RequestMapping("deletarLivro")
public String removerLivro(Livro u) {

FabricaDeConexoes fc = new FabricaDeConexoes();
Connection conn = fc.getConexao();
LivroDAO uDAO = new LivroDAO(conn);

uDAO.delete_livro(u);
try {
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

return "redirect:listarLivro";
}

@RequestMapping("buscarLivro")
public String buscarLivro(Model model) {

FabricaDeConexoes fc = new FabricaDeConexoes();
Connection conn = fc.getConexao();
LivroDAO uDAO = new LivroDAO(conn);

List livros = uDAO.getListar();
model.addAttribute("livros", livros);
model.addAttribute("tamanho", livros.size());

try {
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

return "buscar_livros";
}

}
 

E tenho o seguinte DAO, onde tem o código de busca.


package br.ufc.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Vector;

import javax.swing.JOptionPane;

import br.ufc.model.Livro;

public class LivroDAO {
private Connection conn;

public LivroDAO(Connection conn) {
this.conn = conn;
}

public void inserir(Livro livro) {

// contruindo o SQL de inserção
String sql = "INSERT INTO livro "
+ "(id,nome,valor,qtdEstoque, categoria)"
+ "values (?,?,?,?,?)";

try {
PreparedStatement stmt = conn.prepareStatement(sql);
stmt.setLong(1, livro.getId());
stmt.setString(2, livro.getNome());
stmt.setDouble(3, livro.getValor());
stmt.setInt(4, livro.getQtdEstoque());
stmt.setString(5, livro.getCategoria());

stmt.execute();
stmt.close();
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

public void delete_livro(Livro livro) {

String sql = "delete from livro where id = ?";

try {

PreparedStatement stm = conn.prepareStatement(sql);
stm.setLong(1, livro.getId());
stm.executeUpdate();

stm.close();

System.out.println("Deletado com Sucesso!!");

} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}

public ArrayList getListar() {
ArrayList livros = new ArrayList();

String sql = "SELECT id,nome,categoria, valor,qtdEstoque FROM livro";

try {
PreparedStatement stmt = conn.prepareStatement(sql);
ResultSet rs = stmt.executeQuery();

while (rs.next()) {
Livro u = new Livro();
u.setId(rs.getInt(1));
u.setNome(rs.getString(2));
u.setCategoria(rs.getString(3));
u.setValor(rs.getDouble(4));
u.setQtdEstoque(rs.getInt(5));
livros.add(u);
}
rs.close();
stmt.close();
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return livros;
}

public Vector buscar(String categoria) {
Vector resultados = new Vector();
String sql = ("SELECT * FROM livro WHERE categoria LIKE '" + categoria + "%';");
ResultSet rs;
try {
PreparedStatement comando = conn.prepareStatement(sql);

rs = comando.executeQuery();

while (rs.next()) {
Livro temp = new Livro();
// pega todos os atributos do livro
temp.setId(rs.getLong("id"));
temp.setNome(rs.getString("nome"));
temp.setValor(rs.getDouble("valor"));
temp.setQtdEstoque(rs.getInt("qtdEstoque"));
temp.setCategoria(rs.getString("categoria"));
resultados.add(temp);
}
rs.close();
comando.close();
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
return resultados;
}
}
 

Contudo dá o seguinte erro.

conectado!
Mai 30, 2015 4:29:31 PM org.apache.catalina.core.StandardWrapperValve invoke
GRAVE: Servlet.service() for servlet [springmvc] in context with path [/LivrariaDoJoao] threw exception [Request processing failed; nested exception is java.lang.NullPointerException] with root cause
java.lang.NullPointerException
at br.ufc.controller.LivroController.buscarPorCategoria(LivroController.java:67)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:215)
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:132)
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:104)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:745)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:685)
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:80)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:919)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:851)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:953)
at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:855)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:646)
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:829)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:504)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:421)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1074)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:611)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:314)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:745)
 

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
crislanio_macedo    0
crislanio_macedo
Em 5/30/2015 às 20:56, HappyHippyHippo disse:

que linha é esta : br.ufc.controller.LivroController.buscarPorCategoria(LivroController.java:67) ?

Seria o método buscarPorCategoria(Livro livro) no LivroController, o problema é como faço para que a String acao, receba algo do tipo String acao = request.getParameter("acao"); Mas como estou fazendo com Spring será diferente

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
HappyHippyHippo    1140
HappyHippyHippo

ler onde fica, também eu sei fazer-lo ... o que é necessário é saber exactamente qual é a linha que te foi pedida


IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora


×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.