Pessoal, alguém pode me dar uma ajuda aqui ?
Não estou conseguindo de maneira alguma achar uma solução para fazer com que o meu DataTable exclua uma um registro da minha tabela.
Debugando o aplicativo, eu percebi que o problema é que o JSP não passa o objeto para o meu ManagedBean. So que eu nao sei como fazer isso !!! Alguem ai pode me dar uma luz ?
O codigo:
MEU JSP
[code]<f:view>
Cadastro de Setores
<h:dataTable value="#{setorManaged.setores}" var="st">
<h:column>
<f:facet name="header">
<h:outputText value="Setor"/>
</f:facet>
<h:outputText value="#{st.setor}"/>
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="Descrição"/>
</f:facet>
<h:outputText value="#{st.descricao}"/>
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="Alterar"/>
</f:facet>
<h:commandLink value="Alterar" action="#{setorManaged.alterar}">
</h:commandLink>
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="Excluir"/>
</f:facet>
<h:inputHidden value="#{setorManaged.setor.idSetor}" />
<h:commandLink value="Excluir" action="#{setorManaged.excluir}" />
</h:column>
</h:dataTable>
<h:inputText value="#{setorManaged.setor.setor}" />
<h:inputText maxlength="100" value="#{setorManaged.setor.descricao}" size="100" />
<h:commandButton value="Cadastrar" action="#{setorManaged.inserir}" />
</h:form>
</body>
[/code]
Meu Managed Bean
...
public String excluir() {
SetorDAO dao = new SetorDAO();
try {
dao.excluir(setor);
return SUCESSO;
} catch (Exception e) {
return FALHA;
}
}
...
COMENTARIO: Nunca apanhei tanto com alguma coisa como estou apanhando com o JSF !!! Talvez seja porque estou fazendo as coisas meio as cegas por nao ter comprado um livro pelo menos, seguindo apenas tutoriais espalhados pelo Google, mas mesmo assim ta Osso heim !
So pra ratificar, como podem ter percebido lendo o JSP, eu tentei passar um inputHidden com o codigo do meu objeto para o meu ManagedBean, porem acho que nao fiz muito certo !
Obrigado !
Você tem que utilizar paramantros para enviar o valor.
utilize assim:
<h:commandLink actionListener="#{classe.mentodo}" action="#{classe.act}" styleClass="link" value="Excluir">
<f:param value="#{valorParamentro.value}" name="id" id="id" binding="#{classe.id}" />
</h:commandLink>
Voce tem que pegar o id da linha da tabela para poder excluir o objeto por ele.
Segue meu dataTable que faz isto:
<rich:dataTable id="listarUsuario" align="center"
value="#{usuarioBean.usuarios}" var="usuario"
onRowMouseOver="this.style.backgroundColor='#F8F8F8'"
onRowMouseOut="this.style.backgroundColor='#{a4jSkin.tableBackgroundColor}'"
rowClasses="cur">
<rich:column breakBefore="true">
<f:facet name="header">Id</f:facet>
<f:param name="id" value="#{usuario.id}"/>
<h:outputText value="#{usuario.id}" />
</rich:column>
<rich:column>
<f:facet name="header">Nome</f:facet>
<h:outputText value="#{usuario.nome}" />
</rich:column>
<rich:column>
<f:facet name="header">Alterar</f:facet>
<h:commandLink action="#{usuarioBean.alterar}" value="Alterar">
<f:setPropertyActionListener value="#{usuario.id}" target="#{usuarioBean.id}" />
</h:commandLink>
</rich:column>
<rich:column>
<f:facet name="header">Excluir</f:facet>
<h:commandLink action="#{usuarioBean.excluir}" value="Excluir">
<f:setPropertyActionListener value="#{usuario.id}" target="#{usuarioBean.id}" />
</h:commandLink>
</rich:column>
</rich:dataTable>
Ta bem resumido mas é isso que vc tem que fazer.
Ainda estou testando e fazendo algumas adaptacoes no meu codigo para ver se funciona, mas antecipadamente agradeco a voces pela resposta !
Daqui a pouco eu posto o resultado aqui
Valeu !
Pessoal, deu certo viu ! Valeu mesmo !!!
Pessoal, não querendo abusar (apenas aprender)… mais duas duvidas, se puder responder:
-
Pra fazer o metodo ALTERAR no meu ManagedBean, eu uso o mesmo principio, porem, no meu jsp, eu tenho os campos SETOR E DESCRICAO embaixo da propria DataTable. Como eu faço para esses campos assumirem os devidos valores do registro no Banco de dados ?
-
Instalei o RichFaces, com suas devidas libs e alterações no XML, porem quando inicializo meu projeto no browser, aparece a mensagem ERRO 503 - Service not availble. Há algum conflito entre o Richfaces e o JSF ? Eu nao usei nenhuma tag do RichFaces, apenas instalei no meu projeto pra deixar la pra amanha ou depois comecar a estudar.
Obrigado.
Qual servidor você está utilizando, pois as versões anteriores do apache 6 não aceita o richfaces
Estou usando o Glassfish v2. Ja eliminei o Tomcat justamente por causa dessas limitações
Pade ser erro do arquivo de configuração
<filter>
<display-name>Ajax4jsf Filter</display-name>
<filter-name>ajax4jsf</filter-name>
<filter-class>org.ajax4jsf.Filter</filter-class>
</filter>
<filter-mapping>
<filter-name>ajax4jsf</filter-name>
<servlet-name>Faces Servlet</servlet-name>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
<dispatcher>INCLUDE</dispatcher>
</filter-mapping>
<context-param>
<param-name>org.richfaces.SKIN</param-name>
<param-value>wine</param-value>
</context-param>
<context-param>
<param-name>org.ajax4jsf.COMPRESS_SCRIPT</param-name>
<param-value>true</param-value>
</context-param>
<context-param>
<param-name>org.ajax4jsf.COMPRESS_STYLE</param-name>
<param-value>true</param-value>
</context-param>
<context-param>
<param-name>org.richfaces.CONTROL_SKINNING</param-name>
<param-value>enable</param-value>
</context-param>
O tomcat utiliza o Richfaces 3.3.0.GA a partir das versões 5.5 em diante. Se vc estiver usando a versão mais nova do richfaces (3.0.0.GA) existe a necessidades de atualizar as libs do teu projeto. Caso estejam atualizadas possa ser q esteja faltando alguma dependência e isso é bastante comum nas pessoas que começam aprender a usar essa versão do RichFaces.
Posta tuas libs, teu xml de configuração.