JSF Inserir data atual na base de dados /Problema com horário adiantado

Olá colegas,
Estou aprendendo JSF e estou com uma certa dificuldade em inserir a data atual na base de dados, talvez seja algo simples, mas já realizei algumas pesquisa e não tenho ideia de como fazer.

Acontece que exibo a data atual com o “#{chamadaBean.data}”, referenciando tal método no Bean no input “dataAbertura” que exibe essa data, só que com isso eu perco a referencia para a classe que é responsável pela persistência que deveria ser referenciada conforme os outros inputs, ex. “#{chamadaBean.chamadaEdicao.titulo}”.

Dialogo:

<p:dialog header="Nova chamada" widgetVar="edicaoChamadaDialog"
                      id="chamada-dialog" resizable="false" modal="true"
                      closeOnEscape="true">

                <p:messages id="msgs-dialog" />
                <p:defaultCommand target="salvar-button" scope="chamada-dialog" />

                <h:panelGrid columns="4" id="painel-dialog">
                    <p:outputLabel value="Chamada" />
                    <p:inputText widgetVar="nrmChamada" readonly="true"/>

                    <p:outputLabel value="Data abertura"/>
                    <p:inputText id="dataAbertura" value="#{currentDate}" readonly="false">
                        <f:convertDateTime pattern="dd/MM/yyyy" />

                    </p:inputText>


                    <p:outputLabel value="Categoria" for="categoria" />
                    <p:selectOneMenu id="categoria" value="#{chamadaBean.chamadaEdicao.categoria}">
                        <f:selectItem itemLabel="Selecione" />
                        <f:selectItems value="#{chamadaBean.categoriaChamada}" var="categoria"
                                       itemLabel="#{categoria.descricao}" itemValue="#{categoria}" />
                    </p:selectOneMenu>

                    <p:outputLabel value="Setor" for="setor"/>
                    <p:selectOneMenu id="setor" value="#{chamadaBean.chamadaEdicao.setor}">
                        <f:selectItem itemLabel="Selecione" />
                        <f:selectItems value="#{chamadaBean.setorChamada}" var="setor"
                                       itemLabel="#{setor.descricao}" itemValue="#{setor}" />
                    </p:selectOneMenu>

                    <p:outputLabel value="Título" />
                    <p:inputText maxlength="30" value="#{chamadaBean.chamadaEdicao.titulo}"/>

                    <p:outputLabel value="Prioridade" for="prioridade" />
                    <p:selectOneMenu id="prioridade" value="#{chamadaBean.chamadaEdicao.prioridade}" >
                        <f:selectItem itemLabel="Selecione" />
                        <f:selectItems value="#{chamadaBean.prioridadeChamada}" var="prioridade"
                                       itemLabel="#{prioridade.descricao}" itemValue="#{prioridade}" />
                    </p:selectOneMenu>



                    <p:outputLabel value="Descrição" />
                    <p:inputTextarea rows="10" cols="60" maxlength="1000" autoResize="false"
                                     counter="display" counterTemplate="{0} caracters restantes."
                                     value="#{chamadaBean.chamadaEdicao.descricao}"/>
                    <p:outputLabel />
                    <p:outputLabel />

                    <p:outputLabel />
                    <p:outputLabel id="display"/>
                    <p:outputLabel />
                    <p:outputLabel />

                    <p:outputLabel value="Anexo" />
                    <h:form enctype="multipart/form-data">
                        <p:growl id="messages" showDetail="true" />

                        <p:fileUpload value="#{fileUploadView.file}" mode="simple" style="simple"/>

                        <p:commandButton value="Submit" ajax="false" actionListener="#{fileUploadView.upload}" disabled="true" />
                    </h:form>

                    <p:outputLabel />
                    <p:outputLabel />


                    <p:outputLabel />

                    <h:panelGrid columns="2">
                        <p:commandButton value="Salvar" id="salvar-button"
                                         action="#{chamadaBean.salvar}"
                                         process="chamada-dialog" update="chamadas-table"
                                         oncomplete="if (!args.validationFailed) PF('edicaoChamadaDialog').hide()"/>
                    </h:panelGrid>
                </h:panelGrid>
            </p:dialog>

Bean:

@Named
@ViewScoped
public class chamadaBean implements Serializable {

private static final long serialVersionUID = 1L;

@Inject
private Chamadas chamadas;

@Inject
private CadastroChamadaService cadastroChamada;

@Inject
private FacesMessages messages;

private List<Chamada> todasChamadas;
private Chamada chamadaEdicao = new Chamada();
private Chamada chamadaSelecionada;

public void prepararNovoCadastro() {
    chamadaEdicao = new Chamada();
}

public void salvar() {
    cadastroChamada.salvar(chamadaEdicao);
    consultar();

    messages.info("Chamada aberta com sucesso!");

    RequestContext.getCurrentInstance().update(
            Arrays.asList("frm:msgs", "frm:chamadas-table"));
}

public void excluir() {
    cadastroChamada.excluir(chamadaSelecionada);
    chamadaSelecionada = null;

    consultar();

    messages.info("Chamada excluída com sucesso!");
}

public void consultar() {
    todasChamadas = chamadas.todas();
}

public List<Chamada> getTodasChamadas() {
	return todasChamadas;
}

public Date getDataAtual(){
	Calendar calendar = new GregorianCalendar();
	Date date = new Date();
	calendar.setTime(date);
	return calendar.getTime();
}

Objeto:

@Entity
public class Chamada implements Serializable {

private static final long serialVersionUID = 1L;

@Id
@GeneratedValue
private Long id;

@NotNull
@Enumerated(EnumType.STRING)
private CategoriaChamada categoria;

@Past
@Temporal(TemporalType.DATE)
@Column(name = "data_abertura")
private Date dataAbertura;

@Past
@Temporal(TemporalType.DATE)
@Column(name = "dataini_atendimento")
private Date datainiAtendimento;

@Past
@Temporal(TemporalType.DATE)
@Column(name = "datafim_atendimento")
private Date dataFundacao;

@NotNull
@Column(name = "descricao", nullable = false, length = 1000)
private String descricao;

@NotNull
@Enumerated(EnumType.STRING)
private PrioridadeChamada prioridade;

@Column(name = "relatorio", length = 1000)
private String relatorio;

@NotNull
@Enumerated(EnumType.STRING)
private SetorChamada setor;

@NotNull
@Column(name = "titulo", length = 200)
private String titulo;

@Column(name = "situacao", length = 20)
private String situacao;

@Column(name = "user_abertura")
private Integer userAbertura;

@Column(name = "user_atendimento")
private Integer userAtendimento;

public Long getId() {
    return id;
}

public void setId(Long id) {
    this.id = id;
}

public CategoriaChamada getCategoria() {
    return categoria;
}

public void setCategoria(CategoriaChamada categoria) {
    this.categoria = categoria;
}

public Date getDataAbertura() {
    return dataAbertura;
}

public void setDataAbertura(Date dataAbertura) {
    this.dataAbertura = dataAbertura;
}

public Date getDatainiAtendimento() {
    return datainiAtendimento;
}

public void setDatainiAtendimento(Date datainiAtendimento) {
    this.datainiAtendimento = datainiAtendimento;
}

public Date getDataFundacao() {
    return dataFundacao;
}

public void setDataFundacao(Date dataFundacao) {
    this.dataFundacao = dataFundacao;
}

public String getDescricao() {
    return descricao;
}

public void setDescricao(String descricao) {
    this.descricao = descricao;
}

public PrioridadeChamada getPrioridade() {
    return prioridade;
}

public void setPrioridade(PrioridadeChamada prioridade) {
    this.prioridade = prioridade;
}

public String getRelatorio() {
    return relatorio;
}

public void setRelatorio(String relatorio) {
    this.relatorio = relatorio;
}

public SetorChamada getSetor() {
    return setor;
}

public void setSetor(SetorChamada setor) {
    this.setor = setor;
}

public String getTitulo() {
    return titulo;
}

public void setTitulo(String titulo) {
    this.titulo = titulo;
}

public Integer getUserAtendimento() {
    return userAtendimento;
}

public void setUserAtendimento(Integer userAtendimento) {
    this.userAtendimento = userAtendimento;
}

public String getSituacao() {
    return situacao;
}

public void setSituacao(String situacao) {
    this.situacao = situacao;
}

public Integer getUserAbertura() {
    return userAbertura;
}

public void setUserAbertura(Integer userAbertura) {
    this.userAbertura = userAbertura;
}

@Override
public int hashCode() {
    final int prime = 31;
    int result = 1;
    result = prime * result + ((id == null) ? 0 : id.hashCode());
    return result;
}

@Override
public boolean equals(Object obj) {
    if (this == obj) {
        return true;
    }
    if (obj == null) {
        return false;
    }
    if (getClass() != obj.getClass()) {
        return false;
    }
    Chamada other = (Chamada) obj;
    if (id == null) {
        if (other.id != null) {
            return false;
        }
    } else if (!id.equals(other.id)) {
        return false;
    }
    return true;
}

}

A inserção é feita normalmente, só que não leva a data, acredito que pela referente, alguem poderia dar um luz de uma solução? Grato!

E qual a dificuldade, jovem?

Olá, acrescentei informações no tópico.

Olha, você nem precisa apresentar os dados na view, porém, você precisa chamar o método getDataAtual antes desta linha

cadastroChamada.salvar(chamadaEdicao);

Obrigado, inseri o método antes do cadastro e deu certo, está inserindo a data, está dando apenas um problema com relação ao horário, fui no objeto e alterei a propriedade dos campos de datas para timestamp para pegar o horário também.

@Past
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "data_abertura")
private Date dataAbertura;

@Past
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "dataini_atendimento")
private Date datainiAtendimento;

@Past
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "datafim_atendimento")
private Date dataFundacao;

Porém quando é feita a inserção o horário fica 4 horas adiantado.


Pensei que pudesse ser por conta do fuso ou algo assim, então fui verificar os dados no método antes de serem retornados.

O horário bateu com o horário do sistema, o print foi de manhã.
Então acredito que possa ser no momento da persistência, mas não sei onde analisar/verificar.
Alguma ideia do que possa ser ou onde verificar?
O código da table e do dialogo estão assim:

<p:dataTable value="#{chamadaBean.todasChamadas}"
                         var="chamada" emptyMessage="Nenhuma chamada cadastrada." rows="15"
                         paginator="true" paginatorPosition="bottom" style="margin-top: 10px"
                         id="chamadas-table" selection="#{chamadaBean.chamadaSelecionada}"
                         selectionMode="single" rowKey="#{chamada.id}">

                <p:ajax event="rowSelect" update=":frm:toolbar" />
                <p:ajax event="rowUnselect" update=":frm:toolbar" />

                <p:column headerText="Número" sortBy="#{chamada.id}">
                    <h:outputText value="#{chamada.id}" />
                </p:column>
                <p:column headerText="Título">
                    <h:outputText value="#{chamada.titulo}"/>
                </p:column>
                <p:column headerText="Setor" sortBy="#{chamada.setor.descricao}">
                    <h:outputText value="#{chamada.setor.descricao}" />
                </p:column>
                <p:column headerText="Categoria" sortBy="#{chamada.categoria.descricao}" >
                    <h:outputText value="#{chamada.categoria.descricao}" />
                </p:column>
                <p:column headerText="Prioridade"
                          sortBy="#{chamada.prioridade}" >
                    <h:outputText value="#{chamada.prioridade.descricao}" />
                </p:column>
                <p:column headerText="Abertura" sortBy="#{chamada.dataAbertura}">
                    <h:outputText value="#{chamada.dataAbertura}" >
                        <f:convertDateTime pattern="dd/MM/yyyy HH:mm"/>
                    </h:outputText>

                </p:column>
                <p:column headerText="Usuário" width="150">
                    <h:outputText value="#{chamada.userAbertura}" />
                </p:column>
                <p:column headerText="Situação">
                    <h:outputText value="#{chamada.situacao}" />
                </p:column>
                <p:column style="width:32px;text-align: center">
                    <p:commandButton icon="ui-icon-search" title="Ver"
                                     process="@this"
                                     oncomplete="PF('detailChamadaDialog').show()"
                                     disabled="#{chamadaBean.chamadaSelecionada == null}">
                        <p:resetInput target="chamadadetail-dialog" />

                        <f:setPropertyActionListener value="#{chamadaBean.chamadaSelecionada}" 
                                                     target="#{chamadaBean.chamadaEdicao}"/>
                    </p:commandButton>
                </p:column>
            </p:dataTable>

            <p:dialog header="Nova chamada" widgetVar="edicaoChamadaDialog"
                      id="chamada-dialog" resizable="false" modal="true"
                      closeOnEscape="true">

                <p:messages id="msgs-dialog" />
                <p:defaultCommand target="salvar-button" scope="chamada-dialog" />

                <h:panelGrid columns="4" id="painel-dialog">
                    <p:outputLabel value="Chamada" />
                    <p:inputText widgetVar="nrmChamada" readonly="true"/>

                    <p:outputLabel value="Abertura"/>
                    <p:inputText id="dataAbertura" value="#{chamadaBean.chamadaEdicao.dataAbertura}" readonly="false">
                        <f:convertDateTime pattern="dd/MM/yyyy HH:mm" />
                    </p:inputText>


                    <p:outputLabel value="Categoria" for="categoria" />
                    <p:selectOneMenu id="categoria" value="#{chamadaBean.chamadaEdicao.categoria}">
                        <f:selectItem itemLabel="Selecione" />
                        <f:selectItems value="#{chamadaBean.categoriaChamada}" var="categoria"
                                       itemLabel="#{categoria.descricao}" itemValue="#{categoria}" />
                    </p:selectOneMenu>

                    <p:outputLabel value="Setor" for="setor"/>
                    <p:selectOneMenu id="setor" value="#{chamadaBean.chamadaEdicao.setor}">
                        <f:selectItem itemLabel="Selecione" />
                        <f:selectItems value="#{chamadaBean.setorChamada}" var="setor"
                                       itemLabel="#{setor.descricao}" itemValue="#{setor}" />
                    </p:selectOneMenu>

                    <p:outputLabel value="Título" />
                    <p:inputText maxlength="30" value="#{chamadaBean.chamadaEdicao.titulo}"/>

                    <p:outputLabel value="Prioridade" for="prioridade" />
                    <p:selectOneMenu id="prioridade" value="#{chamadaBean.chamadaEdicao.prioridade}" >
                        <f:selectItem itemLabel="Selecione" />
                        <f:selectItems value="#{chamadaBean.prioridadeChamada}" var="prioridade"
                                       itemLabel="#{prioridade.descricao}" itemValue="#{prioridade}" />
                    </p:selectOneMenu>



                    <p:outputLabel value="Descrição" />
                    <p:inputTextarea rows="10" cols="60" maxlength="1000" autoResize="false"
                                     counter="display" counterTemplate="{0} caracters restantes."
                                     value="#{chamadaBean.chamadaEdicao.descricao}"/>
                    <p:outputLabel />
                    <p:outputLabel />

                    <p:outputLabel />
                    <p:outputLabel id="display"/>
                    <p:outputLabel />
                    <p:outputLabel />

                    <p:outputLabel value="Anexo" />
                    <h:form enctype="multipart/form-data">
                        <p:growl id="messages" showDetail="true" />

                        <p:fileUpload value="#{fileUploadView.file}" mode="simple" style="simple"/>

                        <p:commandButton value="Submit" ajax="false" actionListener="#{fileUploadView.upload}" disabled="true" />
                    </h:form>

                    <p:outputLabel />
                    <p:outputLabel />


                    <p:outputLabel />

                    <h:panelGrid columns="2">
                        <p:commandButton value="Salvar" id="salvar-button"
                                         action="#{chamadaBean.salvar}"
                                         process="chamada-dialog" update="chamadas-table"
                                         oncomplete="if (!args.validationFailed) PF('edicaoChamadaDialog').hide()"/>
                    </h:panelGrid>
                </h:panelGrid>
            </p:dialog>

Grato!

Qual?

Para deixar o locale br

Locale.setDefault(new Locale("pt", "BR"));

Conforme print acima.

O horário está inserindo normal, porém adiantado.