Senhores, estou utilizando CDI 1.2 em conjunto com JSF 2.2 (Primefaces) e embora eu tenha tentado utilizar o BootsFaces eu o abandonei em razão de uma falha que eu atribuía a utilização da biblioteca do Bootsfaces.
Quando meus inputs estavam contidos dentro de um panel do bootsfaces então a informação preenchida nos inputs não chegava ao ManagedBean, descoberto isto removi a LIB e passei a trabalhar apenas com primefaces, porém... infelizmente o erro ainda persiste e as informações sempre chegam nulas ao bean.
ProjetoBean.java
import java.io.Serializable;
import java.util.List;
import javax.enterprise.context.SessionScoped;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.inject.Inject;
import javax.inject.Named;
import com.projeto.timesheet.dao.ProjetoDAO;
import com.projeto.timesheet.entity.Projeto;
@Named
@SessionScoped
public class ProjetoBean implements Serializable {
private static final long serialVersionUID = 1L;
public ProjetoBean(){
clean();
}
@Inject
private ProjetoDAO dao;
private Projeto projeto;
private List<Projeto> projetos;
public Projeto getProjeto() {
return projeto;
}
public void setProjeto(Projeto projeto) {
this.projeto = projeto;
}
public void salvar(){
try{
dao.salvar(projeto);
clean();
FacesMessage msg = new FacesMessage(FacesMessage.SEVERITY_INFO,"SUCESSO!","O PROJETO FOI SALVO!");
FacesContext.getCurrentInstance().addMessage(null, msg);
} catch(Exception e){
e.printStackTrace();
FacesMessage msg = new FacesMessage(FacesMessage.SEVERITY_ERROR,"ERRO AO SALVAR PROJETO","COMUNIQUE A ÁREA TÉCNICA!");
FacesContext.getCurrentInstance().addMessage(null, msg);
}
}
public void pesquisar(){
try{
this.projetos = dao.pesquisar(projeto);
}catch(Exception e){
e.printStackTrace();
FacesMessage msg = new FacesMessage(FacesMessage.SEVERITY_ERROR,"ERRO AO PESQUISAR PROJETO","COMUNIQUE A ÁREA TÉCNICA!");
FacesContext.getCurrentInstance().addMessage(null, msg);
}
}
public List<Projeto> getProjetos() {
return projetos;
}
public void setProjetos(List<Projeto> projetos) {
this.projetos = projetos;
}
private void clean(){
this.projeto = new Projeto();
}
}
Minha estrutura de páginas se encontra da seguinte forma: webapp --> management --> projeto -> gerenciamento-de-projetos.xhtml
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:p="http://primefaces.org/ui">
<ui:composition template="/resources/template/template.xhtml">
<ui:define name="corpoDaPagina">
<h:form prependId="false">
<p:messages autoUpdate="true" showDetail="true" />
<p:tabView activeIndex="0">
<p:tab title="Cadastro de Projeto" icon="fa fa-database fa-fw">
<ui:include src="/management/projeto/tab-cadastro-projetos.xhtml" />
</p:tab>
<p:tab title="Pesquisa de Projetos" icon="fa fa-search fa-fw">
<ui:include src="/management/projeto/tab-cadastro-consulta.xhtml" />
</p:tab>
</p:tabView>
</h:form>
</ui:define>
</ui:composition>
</html>
webapp --> management --> projeto -> tab-cadastro-projetos.xhtml
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:p="http://primefaces.org/ui" xmlns:b="http://bootsfaces.net/ui">
<div class="ui-fluid">
<p:panelGrid layout="grid" columns="1"
columnClasses="ui-grid-col-12,ui-grid-col-2"
styleClass="ui-panelgrid-blank">
<p:outputLabel value="Nome do Projeto" for="txtNomeProjeto" />
<p:inputText value="#{projetoBean.projeto.nomeProjeto}"
id="txtNomeProjeto" name="txtNomeProjeto" />
</p:panelGrid>
<p:panelGrid layout="grid" columns="1"
columnClasses="ui-grid-col-2,ui-grid-col-12"
styleClass="ui-panelgrid-blank">
<p:commandButton value="Salvar" action="#{projetoBean.salvar()}"
process="@form"/>
</p:panelGrid>
</div>
</ui:composition>
E agora?