[Resolvido] JSF Puro, Editar linha dataTable

6 respostas
P

opa!

galera, como posso fazer para colocar um link de editar em um
datatable, esse link tem que passar somente o ID para a próxima
página, onde farei o select no banco de dados

será que fui claro, não estou usando nem quero [pelo menos por
enquanto] usar um framework

meu faces-config.xml

<managed-bean>
 <managed-bean-name>controleEquipe</managed-bean-name>
 <managed-bean-class>br.com.ternet.cartao.controller.ControleEquipe</
managed-bean-class>
 <managed-bean-scope>request</managed-bean-scope>
 </managed-bean>

meu dataTable

<h:dataTable id="equipes" value="#{controleEquipe.listaEquipes}"
var="currentItem">
       <h:column>
               <f:facet name="header">
                       <h:outputText value="#"></h:outputText>
               </f:facet>
               <h:form>
                       <h:inputHidden value="#{currentItem.codEquipe}"></h:inputHidden>
                       <h:commandLink value="Editar" action="#{controleEquipe.editar}"></
h:commandLink>
               </h:form>
       </h:column>
       <h:column>
               <f:facet name="header">
                       <h:outputText value="Nome"></h:outputText>
               </f:facet>
               <h:outputText value="#{currentItem.nomeEquipe}"></h:outputText>
       </h:column>
</h:dataTable>

meu ManagedBean

public String editar() {
               System.out.println(equipe.getCodEquipe());
               System.out.println(currentItem.getCodEquipe());

               equipe = new EquipeBean();
               equipe.setCodEquipe(currentItem.getCodEquipe());
               equipe.setNomeEquipe(currentItem.getNomeEquipe());
               FacesContext context = FacesContext.getCurrentInstance();
               FacesMessage message = new FacesMessage( salvar(equipe) );
               context.addMessage(null, message);
               return "editarEquipe";
       }

no meu MB tenho as variaveis equipe e currentItem que são do tipo
EquipeBean

espero que alguem me ajude

abraço

6 Respostas

Y

Você pode passar um parametro para o Bean. Algo parecido com isso:

...sua datatable...
        <h:form>  
             <h:commandLink value="Editar" action="#{controleEquipe.editar}">
                  <f:param value="#{currentItem.codEquipe}" name="codEquipe"/>                        
             </h:commandLink>  
         </h:form>

No Bean

public String editar() {  
        String parametro = "";
        FacesContext context = FacesContext.getCurrentInstance();
	HttpServletRequest req = (HttpServletRequest) context.getExternalContext().getRequest();
	if(req.getParameter("codEquipe") != null && !req.getParameter("codEquipe").equals(""))
	       parametro = req.getParameter("codEquipe");

         System.out.println(parametro);  
   
         equipe = new EquipeBean();  
         equipe.setCodEquipe(currentItem.getCodEquipe());  
         equipe.setNomeEquipe(currentItem.getNomeEquipe());  
         FacesContext context = FacesContext.getCurrentInstance();  
         FacesMessage message = new FacesMessage( salvar(equipe) );  
         context.addMessage(null, message);  
         return "editarEquipe";  
}

[]´s

Daniel

R

Ja respondi um post igual
veja
http://www.guj.com.br/posts/list/119119.java#644952
T+

P

yorgan

deu certinho

muito obrigado

agora, como eu faço para quando salvar ele renderizar novamente o dataTable?

tem como?

Y

Após salvar os dados, você pode chamar o método que carrega a dataTable inicialmente. Com isso, quando você retornar para a página, ela estará atualizada.

[]´s

Daniel

P

Muito obrigado Daniel, resolveu meu problema!

obrigado mesmo

P

Outra alternativa

public String editar() {
		FacesContext context = FacesContext.getCurrentInstance();
		FacesMessage message = new FacesMessage("");
		try {
			if ( equipe != null && equipe.getCodEquipe() != null && equipe.getCodEquipe() != 0 ) {
				equipe = new EquipeBiz().read( equipe.getCodEquipe() );    
				return null;
			}
			message = new FacesMessage("Erro ao selecionar." );
			context.addMessage(null, message);
			return null;
		} catch (SQLException e) {
			message = new FacesMessage("Erro no banco de dados: " + e.getLocalizedMessage() );
			context.addMessage(null, message);
			return null;
		}
	}

e no datatable

<h:form>
									<h:commandLink value="Editar" action="#{controleEquipe.editar}">
										<f:setPropertyActionListener value="#{currentItem.codEquipe}"
											target="#{controleEquipe.equipe.codEquipe}" /> 
									</h:commandLink>
                                                                </h:form>
Criado 24 de março de 2009
Ultima resposta 24 de mar. de 2009
Respostas 6
Participantes 3