Boa tarde, alguém com paciência para me ajudar nesse caso? Estou dando continuidade em um estudo de java depois que finalizou as video aulas, e certas dificuldades estão aparecendo. Pra quem entende, é coisa simples.
Descrição: Tenho um DAO no qual ele faz um LIST, gostaria de trazer o campo “posse” que é um date, já formatado para a view. Testei outras possibilidadades que deram certo, porem preciso aprender de uma vez por todas essa forma, digamos assim. Pois andei pesquisando e sei que dá certo. Porem nao consigo o finalizar.
No console ele formata traquilo, porem na view nao consigo o fazer.
Segue imagens para melhor descrição.
Se é um campo que representa uma data, não tem por que não obtê-lo como sendo uma instância de java.util.Date (eu preferiria o LocalDate) e realizar a formatação do mesmo apenas no momento de apresentar.
Como você apenas citou o DAO e LIST, não explicando com maiores detalhes o que está usando (jdbc, jpa) e para que fins está desenvolvendo (web, desktop), fica complicado dar mais detalhes de como implementar.
boa tarde,
entao: uso de jdbc ( mysql). O projeto é sistema web, conforme as imagens anexadas. Eu andei lendo o seguinte, porem sem resultado.
Eu poderia ao TRAZER do banco com o select para o LIST, esse campo date que tem o formato (2019-12-11) formatado para (11/12/2019 ) permanecendo no banco o formato original. Esse resultado seria mostrado na jsp na tabela.
package br.com.sistemaweb.model.dao;
import java.sql.Connection;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;
import br.com.sistemaweb.conexao.InterfacePool;
import br.com.sistemaweb.model.bean.Funcionario;
public class FuncionarioDAO implements InterfaceFuncionarioDAO {
private InterfacePool pool; // conexao
public FuncionarioDAO(InterfacePool pool) {
super();
this.pool = pool;
}
@Override
public void atualizar(Funcionario funcionario) throws SQLException {
Connection con = null;
try {
con = pool.getConnection();
PreparedStatement ps;
String sqlAtualizar = "UPDATE funcionario SET actotal = ?, auditoria = ?, bairro = ?, " +
" cargo = ?, celular = ?, cep = ?, cidade = ?, comissao = ?, cpf = ?, departamento_codigo = ?, " +
" email = ?, endereco = ?, estado = ?, fone = ?, login = ?, nome = ?, orgaorg = ?, " +
" posse = ?, rg = ?, senha = ? WHERE codigo = ? ;";
ps = con.prepareStatement(sqlAtualizar);
setPreparedStatement(funcionario, ps);
ps.executeUpdate();
ps.close();
}finally
{
pool.liberarConnection(con);
}
}
@Override
public void excluir(Integer codigo) throws SQLException {
Connection con = null;
try{
con = pool.getConnection();
PreparedStatement ps;
String sqlDelete = "DELETE FROM funcionario WHERE codigo = ? ;";
ps = con.prepareStatement(sqlDelete);
ps.setInt(1, codigo);
ps.executeUpdate();
ps.close();
}finally{
pool.liberarConnection(con);
}
}
@Override
public Funcionario getFuncionario(Integer codigo) throws SQLException {
Funcionario funcionario = null;
Connection con = null;
try {
con = pool.getConnection();
PreparedStatement ps;
String sqlSelect ="SELECT * FROM funcionario WHERE codigo = ? ;";
ps = con.prepareStatement(sqlSelect);
ps.setInt(1, codigo);
ResultSet rs = ps.executeQuery();
List<Funcionario> resultado = getListaFuncionarios(rs);
if(resultado.size() > 0 )
funcionario = resultado.get(0);
rs.close();
ps.close();
}finally
{
pool.liberarConnection(con);
}
return funcionario;
}
@Override
public Funcionario getFuncionario(String login) throws SQLException {
Funcionario funcionario = null;
Connection con = null;
try {
con = pool.getConnection();
PreparedStatement ps;
String sqlSelect ="SELECT * FROM funcionario WHERE login = ? ;";
ps = con.prepareStatement(sqlSelect);
ps.setString(1, login);
ResultSet rs = ps.executeQuery();
List<Funcionario> resultado = getListaFuncionarios(rs);
if(resultado.size() > 0 )
funcionario = resultado.get(0);
rs.close();
ps.close();
}finally
{
pool.liberarConnection(con);
}
return funcionario;
}
@Override
public List<Funcionario> getFuncionarios() throws SQLException {
List<Funcionario> resultado = null;
Connection con = null;
try {
con = pool.getConnection();
PreparedStatement ps;
String sqlSelect = "SELECT * FROM funcionario;";
ps = con.prepareStatement(sqlSelect);
ResultSet rs = ps.executeQuery();
resultado = getListaFuncionarios(rs);
rs.close();
ps.close();
} finally
{
pool.liberarConnection(con);
}
return resultado;
}
private List<Funcionario> getListaFuncionarios(ResultSet rs)
throws SQLException {
List<Funcionario> resultado = new ArrayList<Funcionario>();
while(rs.next())
{
Funcionario funcionario = new Funcionario();
funcionario.setActotal(rs.getString("actotal"));
funcionario.setAuditoria(rs.getString("auditoria"));
funcionario.setBairro(rs.getString("bairro"));
funcionario.setCargo(rs.getString("cargo"));
funcionario.setCelular(rs.getString("celular"));
funcionario.setCep(rs.getString("cep"));
funcionario.setCidade(rs.getString("cidade"));
funcionario.setCodigo(rs.getInt("codigo"));
funcionario.setComissao(rs.getDouble("comissao"));
funcionario.setCpf(rs.getString("cpf"));
funcionario.setDepartamento_codigo(rs.getInt("departamento_codigo"));
funcionario.setEmail(rs.getString("email"));
funcionario.setEndereco(rs.getString("endereco"));
funcionario.setEstado(rs.getString("estado"));
funcionario.setFone(rs.getString("fone"));
funcionario.setLogin(rs.getString("login"));
funcionario.setNome(rs.getString("nome"));
funcionario.setOrgaorg(rs.getString("orgaorg"));
funcionario.setPosse(rs.getDate("posse"));
funcionario.setRg(rs.getString("rg"));
funcionario.setSenha(rs.getString("senha"));
resultado.add(funcionario);
}
return resultado;
}
@Override
public void salvar(Funcionario funcionario) throws SQLException {
Connection con = pool.getConnection();
PreparedStatement ps;
String sqlInsert = "INSERT INTO funcionario (actotal, auditoria, bairro, cargo, " +
" celular, cep, cidade, comissao, cpf, departamento_codigo, email, endereco," +
" estado, fone, login, nome, orgaorg, posse, rg, senha, codigo" +
" ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, " +
" ?, ?, ?); ";
try {
ps = con.prepareStatement(sqlInsert);
setPreparedStatement(funcionario, ps);
ps.executeUpdate();
ps.close();
} finally{
pool.liberarConnection(con);
}
}
private void setPreparedStatement(Funcionario funcionario,
PreparedStatement ps) throws SQLException {
ps.setString(1, funcionario.getActotal());
ps.setString(2, funcionario.getAuditoria());
ps.setString(3, funcionario.getBairro());
ps.setString(4, funcionario.getCargo());
ps.setString(5, funcionario.getCelular());
ps.setString(6, funcionario.getCep());
ps.setString(7, funcionario.getCidade());
ps.setDouble(8, funcionario.getComissao());
ps.setString(9, funcionario.getCpf());
ps.setInt(10, funcionario.getDepartamento_codigo());
ps.setString(11, funcionario.getEmail());
ps.setString(12, funcionario.getEndereco());
ps.setString(13, funcionario.getEstado());
ps.setString(14, funcionario.getFone());
ps.setString(15, funcionario.getLogin());
ps.setString(16, funcionario.getNome());
ps.setString(17, funcionario.getOrgaorg());
ps.setDate(18, funcionario.getPosse());
ps.setString(19, funcionario.getRg());
ps.setString(20, funcionario.getSenha());
ps.setObject(21, funcionario.getCodigo());
}
}
package br.com.sistemaweb.model.bean;
import java.sql.Date;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import br.com.sistemaweb.utilidades.*;
public class Funcionario {
private String actotal;
private String auditoria;
private String bairro;
private String cargo;
private String celular;
private String cep;
private String cidade;
private Integer codigo;
private Double comissao;
private String cpf;
private Integer departamento_codigo;
private String email;
private String endereco;
private String estado;
private String fone;
private String login;
private String nome;
private String orgaorg;
public Date posse;
private String rg;
private String senha;
public String getActotal() {
return actotal;
}
public void setActotal(String actotal) {
this.actotal = actotal;
}
public String getAuditoria() {
return auditoria;
}
public void setAuditoria(String auditoria) {
this.auditoria = auditoria;
}
public String getBairro() {
return bairro;
}
public void setBairro(String bairro) {
this.bairro = bairro;
}
public String getCargo() {
return cargo;
}
public void setCargo(String cargo) {
this.cargo = cargo;
}
public String getCelular() {
return celular;
}
public void setCelular(String celular) {
this.celular = celular;
}
public String getCep() {
return cep;
}
public void setCep(String cep) {
this.cep = cep;
}
public String getCidade() {
return cidade;
}
public void setCidade(String cidade) {
this.cidade = cidade;
}
public Integer getCodigo() {
return codigo;
}
public void setCodigo(Integer codigo) {
this.codigo = codigo;
}
public Double getComissao() {
return comissao;
}
public void setComissao(Double comissao) {
this.comissao = comissao;
}
public String getCpf() {
return cpf;
}
public void setCpf(String cpf) {
this.cpf = cpf;
}
public Integer getDepartamento_codigo() {
return departamento_codigo;
}
public void setDepartamento_codigo(Integer departamento_codigo) {
this.departamento_codigo = departamento_codigo;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getEndereco() {
return endereco;
}
public void setEndereco(String endereco) {
this.endereco = endereco;
}
public String getEstado() {
return estado;
}
public void setEstado(String estado) {
this.estado = estado;
}
public String getFone() {
return fone;
}
public void setFone(String fone) {
this.fone = fone;
}
public String getLogin() {
return login;
}
public void setLogin(String login) {
this.login = login;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public String getOrgaorg() {
return orgaorg;
}
public void setOrgaorg(String orgarg) {
this.orgaorg = orgarg;
}
public Date getPosse() {
/*
SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy");
String strposse= formatter.format(posse);
System.out.println(strposse);
*/
return posse;
}
public void setPosse(Date posse) {
this.posse = posse;
}
public String getRg() {
return rg;
}
public void setRg(String rg) {
this.rg = rg;
}
public String getSenha() {
return senha;
}
public void setSenha(String senha) {
this.senha = senha;
}
/*
public String getDataFormatado()
{
SimpleDateFormat formato = new SimpleDateFormat("dd/MM/yyyy");
return formato.format(getPosse());
}
*/
}
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<%@ taglib prefix=“c” uri=“http://java.sun.com/jsp/jstl/core” %>
<%@ taglib prefix=“fmt” uri=“http://java.sun.com/jsp/jstl/fmt” %>
<%@ page import=“br.com.sistemaweb.model.bean.*” %>
<%@page import=“br.com.sistemaweb.model.bean.Funcionario”%>
SistemaWeb${mensagem}
<thead>
<tr style="color: #000000; font-size: 12px; font-family: Tahoma, Verdana, Arial, Sans-Serif; font-weight: bold">
<th>Cód.</th>
<th>Nome</th>
<th>Cargo</th>
<th>Login</th>
<th>Telefone</th>
<th>Posse</th>
<th colspan="2">Editar</th>
</tr>
</thead>
<tbody>
<c:forEach var="f" items="${funcionarios}" >
<tr>
<td><c:out value="${f.codigo}"/></td>
<td><c:out value="${f.nome}"/></td>
<td><c:out value="${f.cargo}"/></td>
<td><c:out value="${f.login}"/></td>
<td><c:out value="${f.fone}"/></td>
<td><c:out value="${f.posse}"/></td>
<td><a href='SistemawebController?cmd=editarFuncionario&codigo=${f.codigo}'>Atualizar</a></td>
<td><a href='sistemawebController?cmd=excluirFuncionario&codigo=${f.codigo}'>Excluir</a></td>
</c:forEach>
</table>
Cuidado com o que você lê, nem tudo é plausível.
Note:
Este atributo está na tua classe Funcionario.
Se você fizer a formatação na query, vai acabar obtendo o valor da coluna posse como String e não como Date.
Portanto, não faz sentido querer formatar a data na consulta. Afinal, um objeto do tipo Date sempre vai representar uma determinada data, independente de sua formatação de exibição.
Agora, se você quiser formatar para exibir, basta criar um método assim:
public String dateFormatter(Date aData) {
return new SimpleDateFormat("dd/MM/yyyy").format(aData); //retorna data como dd/MM/yyyy
}
E, ao gerar a saída, invoque:
String dataFormatada = dateFormatter(funcionario.getPosse());
Darlan, como eu invocaria na jsp? (Desculpa a ignorancia)
String dataFormatada = dateFormatter(funcionario.getPosse())
Você está usando scriptlet ou EL na jsp?
Ex:
EL
Se está usando EL, significa que possui JSTL também.
<fmt:formatDate pattern = "yyyy-MM-dd" value = "${f.posse}" />
Apenas certifique que está usando a taglib correspondente, no início do arquivo jsp:
<%@ taglib prefix = "fmt" uri = "http://java.sun.com/jsp/jstl/fmt" %>
Ah sim. Eu ja havia testado dessa forma e deu certo.
Creio que se eu usar jstl, nao precisarei de nada do que citou acima anteriormente.
Essas tags de certa forma limita o uso. Pois nao tem para formatacao de moeda por exemplo caso eu precisasse usar na mesma jsp. Na mesma table.
Apos leituras e leituras achei que teria como “formatar” datas, moeda, numeros (como o numberFormat, direto no java e so chamar ele na jsp.
"
O que limita o uso de alguma coisa é falta de estudo e conhecimento
"
Achei meio arredio. Mas tudo bem. Nao vou discutir com os sábios. Eu acato.
É realmente tem alguns grupos, blogs, que eu li algo sobre.
Mas ta bom. Sobre as tags (no caso de data) eu ja tinha descoberto essa forma.
Obrigado!
Resolvi meu problema criando um método na minha classe Funcionário, utilizando o SimpleDateFormat.
Na view, após pesquisas no fórum DevMedia, aprendi que eu posso utilizar:
<jsp:useBean id="funcionario" scope="page" class="br.com.sistemaweb.model.bean.Funcionario">
etc, etc, etc,
<jsp:getProperty name="funcionario" property="posse" />