Questão nº 42
Questão de Tecnologia da Informação · FCC TRT17 2022 (nº 42)
Em uma servlet Java de uma aplicação web em condições ideais, uma lista de objetos do tipo Departamento, contendo os dados de departamentos de uma empresa, foi encapsulada e enviada para uma página JSP chamada `listarDeps.jsp`, por meio do bloco de código abaixo.
List<Departamento> deps = dao.buscarDeps();
request.setAttribute("deps", deps);
disp = request.getRequestDispatcher("listarDeps.jsp");
disp.forward(request, response);
Na página listarDeps.jsp, após os recursos necessários serem importados, para receber essa lista utiliza-se a instrução
- A`<% List<Departamento> deps = request.getAttribute("deps"); %>`
- B`<% List<Departamento> deps = request.getAttribute("deps").toList<Departamento>(); %>`
- C`<% List<Departamento> deps = List<Departamento>() request.getAttribute("deps"); %>`
- D`<% List<Departamento> deps = (List<Departamento>) request.getParameter("deps"); %>`
- E`<% List<Departamento> deps = (List<Departamento>) request.getAttribute("deps"); %>` (alternativa correta)
Resposta comentada
Gabarito Alternativa E
Quando você guarda um objeto no request (o "pedido" HTTP) usando request.setAttribute("nome", objeto), ele é armazenado como um tipo genérico Object. Para usá-lo com seu tipo original (como List<Departamento>) em uma página JSP, você precisa "avisar" ao Java qual é o tipo real do objeto, fazendo um processo chamado casting.
- (A) Incorreta:
request.getAttribute("deps")retorna umObject, e não é possível atribuir diretamente umObjecta umList<Departamento>sem um casting explícito, o que causaria um erro de compilação. - (B) Incorreta: A classe
Object(retornada porrequest.getAttribute) não possui um métodotoList<Departamento>(). Além disso, a sintaxetoList<Tipo>()não é um método Java válido para casting. - (C) Incorreta:
List<Departamento>()antes da chamada ao método não é uma sintaxe válida para casting em Java. O formato correto para casting é(Tipo) objeto. - (D) Incorreta:
request.getParameter("deps")é usado para recuperar dados enviados pelo cliente (parâmetros de URL ou formulário), não objetos armazenados no escopo dorequestviasetAttribute. Esta é a armadilha da banca, pois confunde a forma de recuperar dados do cliente (getParameter) com a forma de recuperar objetos do servidor (getAttribute). - (E) Correta:
request.getAttribute("deps")recupera o objeto armazenado norequestcomo umObject. O(List<Departamento>)realiza o casting explícito, informando ao compilador que oObjectretornado é, de fato, umaList<Departamento>, permitindo sua atribuição correta.
Fonte: FCC TRT17 2022 Analista Judiciário - Área Apoio Especializado - Especialidade Tecnologia da Informação (Caderno Tipo 001). Reproduzida para fins de estudo.