Bom dia Senhores,
Antes de criar esse topico eu pesquisei e não consegui encontrar uma solução.
Essa semana é a primeira que estou trabalhando em cima do Java WEB, segui alguns tutoriais e cheguei no JSF que atende a minha necessidade do projeto.
Estou precisando fazer uma pagina onde passo o codigo do funcionario e ele gera uma lista com as horas que eles trabalharam.
Já consegui passando o valor o valor direto no sql.
Porem preciso pegar o valor do codigo do funcionario e passar como filtro para o banco.
Então entra a ajuda de vcs! 
segue minha classe DAO:
[code]public class HorasDAO {
private Conexao conexao;
public HorasDAO(){
if (conexao == null){
conexao = new Conexao();
}
}
public List<Horas> carrega(){ // carrega as informações do banco
idusuario = Integer.parseInt(Id); //não sei onde buscar esse valor para filtrar o select
List<Horas> hora = new ArrayList<Horas>();
try{
String sql = " SELECT * FROM tabcontrole WHERE cod_func = ? "
+ " ORDER BY data_cont ";
PreparedStatement ps = conexao.getConn().prepareStatement(sql);
ps.setInt(1, idusuario);
ResultSet rs = ps.executeQuery();
while (rs.next()){
Horas hr = new Horas();
hr.setData(rs.getDate("data_cont"));
hr.setEntrada(rs.getTime("entrada"));
hr.setAlmoco(rs.getTime("almoco"));
hr.setRetorno(rs.getTime("volta"));
hr.setSaida(rs.getTime("saida"));
hr.setAdicional(rs.getTime("adicional"));
hr.setJustificativa(rs.getInt("idbanco"));
hr.setObs(rs.getString("obs"));
hora.add(hr);
}
}catch(SQLException e){
e.printStackTrace();
}finally{
conexao.fecharConexao();
}
return hora;
}
[/code]
Esse é o xhtml da pagina inicial, como pegar o parametro do inputText e passar no filtro do select?
[code] <h:head>
Relatorio de Horas
</h:head>
<h:body>
<h:form>
<h:outputLabel value=“Informe o codigo do usuario:”/>
<h:inputText id=“id” value="#{horasDAO.id}"/>
<h:commandButton action=“horas” value=“Horas” />
</h:form>
</h:body>
[/code]
Segue o bean:
[code]@Named
@SessionScoped
public class HorasBean implements Serializable{
private HorasDAO horasDAO;
private Horas horas = new Horas();
private DataModel<Horas> horasTotal;
public Horas getHoras() {
return horas;
}
public void setHoras(Horas horas) {
this.horas = horas;
}
public DataModel<Horas> getHorast() {
horasDAO = new HorasDAO();
List<Horas> horasList = horasDAO.carrega();
horasTotal = new ListDataModel<Horas>(horasList);
return horasTotal;
}
public void setHoras(DataModel<Horas> horasTotal) {
this.horasTotal = horasTotal;
}
}[/code]
Obrigado pela ajuda!
vc vai precisar criar uma classe ManagedBean com um atributo id e um metodo para chamar.
procura na net essa apostila: k19-k12-desenvolvimento-web-com-jsf2-e-jpa2
ela eh otima pra aprender jsf e ensina o que vc esta querendo fazer.
[]'s
E qual o erro do jsf, ao qual o título do tópico faz menção?
aparece “null”
An Error Occurred: null
Erro meu!
Primeiro, quando você tem:
<h:inputText id="id" value="#{horasDAO.id}"/>
Significa que você precisa ter um managedbean chamado horasDAO, que contém um atributo chamado id e, você não o possui.
Não é uma regra, mas pense que para todas as jsf que irá criar (independente de ser jsp ou xhtml), você precisa ter um managedbean que irá tratar dos assuntos referentes à ela.
Esse é o primeiro passo.
Seria algo assim:
[code]import dao.HorasDAO;
import java.io.Serializable;
import java.util.List;
import javax.enterprise.context.SessionScoped;
import javax.faces.bean.ManagedBean;
import javax.faces.model.DataModel;
import javax.faces.model.ListDataModel;
import javax.inject.Named;
import model.Horas;
@Named
@SessionScoped
@ManagedBean
public class HorasBean implements Serializable{
private HorasDAO horasDAO;
private Horas horas = new Horas();
private DataModel<Horas> horasTotal;
private String Id;
public String getId() {
return Id;
}
public void setId(String Id) {
this.Id = Id;
}
public String CarregaHoras(){
getHorast(getId());
return "horas";
}
public Horas getHoras() {
return horas;
}
public void setHoras(Horas horas) {
this.horas = horas;
}
public DataModel<Horas> getHorast(String Iduser) {
horasDAO = new HorasDAO();
List<Horas> horasList = horasDAO.carrega(Iduser);
horasTotal = new ListDataModel<Horas>(horasList);
return horasTotal;
}
public void setHoras(DataModel<Horas> horasTotal) {
this.horasTotal = horasTotal;
}
}[/code]
Mas e o xhtml, como ficaria?
[code] <h:head>
Relatorio de Horas
</h:head>
<h:body>
<h:form>
<h:outputLabel value=“Informe o codigo do usuario:”/>
<h:inputText id=“id” value="#{horasBean.id}"/>
<h:commandButton action="#{horasBean.carregaHoras}" value=“Carregar”/>
<h:commandButton action=“horas” value=“Horas” />
</h:form>
</h:body>
[/code]
<h:form>
<h:outputLabel value="Informe o codigo do usuario:"/>
<h:inputText id="id" value="#{horasBean.id}"/>
<h:commandButton action="#{horasBean.carregaHoras}" value="Carregar"/>
//para que esta linha?
<h:commandButton action="horas" value="Horas" />
</h:form>
A princípio, isto deve funcionar…
Afinal, o usuário preenche o id, clica em carregar e aciona o método carregaHoras (que no bean deve estar em minúscula, não é?).
Assim, como o jsf faz o mapeamento do atributo id ao elemento text cujo value aponta para esta variável, você já tem o parâmetro.
Daí, então, apenas chame o dao
Eu coloquei esse botão p chamar a pagina “horas” onde exibe as informações.
Ta dando esse erro agora:
javax.el.MethodNotFoundException: /index.xhtml @13,83 action="#{horasBean.carregaHoras}": Method not found: controller.HorasBean@190a2c8.carregaHoras()
Colocou o nome do método de acordo com a especificação javaBeans?
Ou seja, com a primeira letra em minúsculo e as demais, seguindo o camelCase (letras minúsculas e, caso haja concatenação de nomes, a primeira letra de cada nome será maiúscula:
metodoQueBuscaAlgo();
metodoQueRetornaAlgo();
metodo();
metodoComUmNomeExtremamenteGrandeEDificil();
)
Pois java é case sensitive e, na tua classe, o nome do método está errado
CarregaHoras(
Cara que coisa!
Muito obrigado!
Funcionou como eu queria!
Obrigado a todos!