Duvidas de JSF

Prezados colegas
Estou estudando JSF e estou convertendo um pequeno aplicativo de struts para JSF.
É um aplicativo de controle de despesas á minha duvida é em pagina onde tenho uma grid e em cada linha da grid tenho um link para editar e excluir.

As duvidas são as seguinte :

1.NO METODO EDITAR COMO PASSAR A DESPESA A SER EDITADA?

No struts

</a>

No JSF ?

<h:column>
<f:facet name=“header”>
<h:outputText value="#{msg[‘prompt.Editar’]}"/>
</f:facet>
<h:commandButton action="#{tipoDespesaBean.editar}" value="#{msg[‘prompt.Editar’]}"/>
</h:column>

2.NO METODO EXCLUIR COMO EXECUTAR O JAVASCRIPT E PASSAR O CODIGO DA DESPESA ?
No Struts

</a>

No jsf ?

<h:column>
<f:facet name=“header”>
<h:outputText value="#{msg[‘prompt.Excluir’]}"/>
</f:facet>
<h:commandButton action="#{tipoDespesaBean.editar}" value="#{msg[‘prompt.Excluir’]}"/>
</h:column>

1-despesa.jsp
<f:view>

            <h1><h:outputText value="#{msg['prompt.TituloLisTipoDespesa']}"/></h1>
          
            <h:dataTable id="estadosTable" value="#{tipoDespesaBean.tipoDespesas}" var="tipoDespesa"
			border="1" cellspacing="0" cellpadding="86" rows="5"
			styleClass="html-table">
               <h:column>
		<f:facet name="header">
		    <h:outputText value="#{msg['prompt.Codigo']}"/>
		</f:facet>
		<h:outputText value="#{tipoDespesa.cdTipoDespesa}" />
	    </h:column> 
                <h:column>
		<f:facet name="header">
		    <h:outputText value="#{msg['prompt.TipoDespesa']}"/>
		</f:facet>
		<h:outputText value="#{tipoDespesa.dsTipoDespesa}" />
	    </h:column>   
                <h:column>
		<f:facet name="header">
		    <h:outputText value="#{msg['prompt.Observacao']}"/>
		</f:facet>
		<h:outputText value="#{tipoDespesa.dsObservacao}" />
	    </h:column>                
                 <h:column>
		<f:facet name="header">
		   <h:outputText value="#{msg['prompt.Editar']}"/>            
		</f:facet>
		<h:commandButton action="#{tipoDespesaBean.editar}" value="#{msg['prompt.Editar']}"/>
                 </h:column>
                 <h:column>
		<f:facet name="header">
		   <h:outputText value="#{msg['prompt.Excluir']}"/>            
		</f:facet>
	        <h:commandButton action="#{tipoDespesaBean.editar}" value="#{msg['prompt.Excluir']}"/>
	     </h:column>
            </h:dataTable>                
         <div align="center">
                <p>&nbsp;</p>
                <h:commandLink action="cadtipodespesa" value="#{msg['prompt.CadNovoTipoDespesa']}" />
                <h:commandLink action="principal" value="#{msg['prompt.TelaPrincipal']}" />
         </div>
        </div>
    </div>  
  </h:form>  
</body>

2-DespesaBean.java

public class DespesaBean {

/**
 * Referencia para a camada de regras de negocio.
 */
private DespesaBusiness despesaBusiness;

/**
 * Usuario a serusado no form.
 */
private Despesa despesa  = new Despesa();

/**
 * Parametro de filtro.
 */
private String filtro;

/**
 * Armazena o usuario logado apos a autenticacao.
 */
public DespesaBusiness getDespesaBusiness() {
	return despesaBusiness;
}

public void setDespesaBusiness(DespesaBusiness despesaBusiness) {
	this.despesaBusiness= despesaBusiness;
}

public Despesa getDespesa() {
	return despesa;
}

public void setDespesa(Despesa despesa) {
	this.despesa = despesa;
}

 public List listar(){
    List lista = despesaBusiness.listar();
 return lista;
}
public void excluir(int  cdDespesa){
    despesaBusiness.excluir(cdDespesa);
return;    

}
public void editar(Despesa despesa){
despesaBusiness.editar(despesa);
return;
}
public String cadastrar() {
try {
despesaBusiness.salvar(despesa);
return “listardespesa”;
} catch (Exception e) {
FacesMessage message = new FacesMessage();
message.setSeverity(FacesMessage.SEVERITY_ERROR);
message.setDetail(“Despesa inválida!”);
FacesContext.getCurrentInstance().addMessage(“DespesaForm”, message);
return null;
}
}
}

Ola bom dia,eu tenho uma tabela ± com as funcionalidades que vc descreveu,mas utilizo um DataModel para capturar a linha a ser excluida veja:
Minha tabela completa.


 &lt;%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %&gt;
&lt;%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %&gt;
&lt;%@ taglib uri="http://richfaces.org/rich" prefix="rich" %&gt;
&lt;%@ taglib uri="http://richfaces.org/a4j" prefix="a4j" %&gt;
&lt;%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %&gt;
&lt;html&gt;
	&lt;head&gt;
		&lt;title&gt;&lt;/title&gt;
&lt;link rel="stylesheet" type="text/css"href='&lt;%= request.getContextPath() + "/css/tabelas.css" %&gt;'&gt; 
	&lt;/head&gt;
	&lt;body&gt;
		&lt;f:view&gt;
		  &lt;h:form&gt;
		  &lt;c:import url="/topo.jsp"&gt;&lt;/c:import&gt;
		 &lt;center&gt;
			&lt;rich:datascroller align="center"  for="tbusuario" maxPages="20" style=" width : 900px;" /&gt;
          
			&lt;rich:dataTable 
                    onRowMouseOver="this.style.backgroundColor='#F1F1F1'"
                    onRowMouseOut="this.style.backgroundColor='#{a4jSkin.tableBackgroundColor}'"
                    cellpadding="0" cellspacing="0" rows="5" 
                    width="700" border="0" var="user" value="#{usuario.model}" id="tbusuario" style=" width : 736px;"&gt;
                    &lt;f:facet name="header"&gt;
                    &lt;rich:columnGroup&gt;
                            &lt;rich:column rowspan="2"&gt;
                            &lt;h:outputText value="#{msg.acoes}"&gt;&lt;/h:outputText&gt;
                            &lt;rich:separator height="12" styleClass="tooltip"&gt;&lt;/rich:separator&gt;                            
                            	 &lt;h:commandLink  action="#{usuario.novo}" immediate="true" id="novo"&gt;			  
			         &lt;h:graphicImage value="/images/BOTOES/novo1.png" width="20" height="20"&gt;
			        &lt;/h:graphicImage&gt;&lt;/h:commandLink&gt;
			        &lt;rich:spacer width="13"&gt;&lt;/rich:spacer&gt;
			        &lt;h:commandLink  action="#{usuario.getTodos}" immediate="true" id="atualizar"&gt;			  
			        &lt;h:graphicImage value="/images/BOTOES/Restart.png" width="20" height="20"&gt;
			        &lt;/h:graphicImage&gt;
			        &lt;/h:commandLink&gt;
			          &lt;/rich:column&gt;
			               &lt;rich:column colspan="5"&gt;
								&lt;h:outputText value="#{msg.usuario}"  &gt;&lt;/h:outputText&gt;
								&lt;/rich:column&gt;
							   &lt;rich:column breakBefore="true" &gt;

                                &lt;h:outputText value="#{msg.codigo}" /&gt;

                            &lt;/rich:column&gt;
                            
                             &lt;rich:column&gt;

                                &lt;h:outputText value="#{msg.nome}"  /&gt;

                            &lt;/rich:column&gt;

                            &lt;rich:column&gt;

                                &lt;h:outputText value="#{msg.sobrenome}" /&gt;

                            &lt;/rich:column&gt;
                            
                             &lt;rich:column&gt;

                                &lt;h:outputText value="#{msg.setor}" /&gt;

                            &lt;/rich:column&gt;
                            
                             &lt;rich:column&gt;

                                &lt;h:outputText value="#{msg.login}" /&gt;

                            &lt;/rich:column&gt;

                           

                        &lt;/rich:columnGroup&gt;

                    &lt;/f:facet&gt;
                      &lt;rich:column&gt;
                          &lt;center&gt;
							 &lt;h:commandLink  action="#{usuario.novo}"&gt;			  
			         			       
			         &lt;/h:commandLink&gt; 			         
			           
			         &lt;h:commandLink  action="#{usuario.editar}" id="editar"&gt;			  
			         &lt;h:graphicImage value="/images/BOTOES/edit.png" width="20" height="20"&gt;
			         &lt;/h:graphicImage&gt;	
			         &lt;/h:commandLink&gt; 
			         &lt;rich:spacer width="13"/&gt; 
			        	       
			          &lt;h:commandLink  action="#{usuario.excluir}" id="excluir"&gt;			  
			         &lt;h:graphicImage value="/images/BOTOES/Trash2.png" width="20" height="20" &gt;
			         &lt;/h:graphicImage&gt;	
			         &lt;/h:commandLink&gt;
			         &lt;/center&gt;
                        &lt;/rich:column&gt;                  
                                  
                       
			        
			        		
                      
                        &lt;rich:column filterBy="#{user.usuarioid}" filterEvent="onkeyup"&gt;
                            &lt;h:outputText value="#{user.usuarioid}"&gt;&lt;/h:outputText&gt;                        
                        &lt;/rich:column&gt;
                         &lt;rich:column &gt;
                            &lt;h:outputText value="#{user.nome}"&gt;&lt;/h:outputText&gt;                        
                        &lt;/rich:column&gt;
                        &lt;rich:column &gt;
                            &lt;h:outputText value="#{user.sobrenome}"&gt;&lt;/h:outputText&gt;
                           &lt;/rich:column&gt;
                           
                           &lt;rich:column &gt;
                            &lt;h:outputText value="#{user.setor}"&gt;&lt;/h:outputText&gt;
                           &lt;/rich:column&gt;
                           
                           &lt;rich:column &gt;
                            &lt;h:outputText value="#{user.login}"&gt;&lt;/h:outputText&gt;
                           &lt;/rich:column&gt;
                        
                      
                &lt;/rich:dataTable&gt;
               &lt;/center&gt;
               &lt;div id="novo"&gt;
                       &lt;rich:toolTip for="novo"followMouse="true" direction="top-right"
                       showDelay="500" styleClass="tooltip"&gt; 
                       &lt;h:outputText value="#{msg.novo}"&gt;&lt;/h:outputText&gt;
                       &lt;/rich:toolTip&gt;                       
               &lt;/div&gt;
               
               &lt;div id="atualizar"&gt;
                       &lt;rich:toolTip for="atualizar"followMouse="true" direction="top-right"
                       showDelay="500" styleClass="tooltip"&gt; 
                       &lt;h:outputText value="#{msg.atualizar}"&gt;&lt;/h:outputText&gt;
                       &lt;/rich:toolTip&gt;                       
               &lt;/div&gt;  
               
                    
               
               &lt;c:import url="/Statusbar.jsp"&gt;&lt;/c:import&gt;      
			&lt;/h:form&gt;	
		  
			
		&lt;/f:view&gt;
	&lt;/body&gt;	
&lt;/html&gt;  

Aqui esta os metodos que capturam a linha corrente:


public Usuario getUsuarioFromEditOrDelete() {
		Usuario usuario = (Usuario) model.getRowData();
		return usuario;

	}

	public String editar() {
		Usuario usuario = getUsuarioFromEditOrDelete();
		setUsuario(usuario);
		return "editarUsuario";


public String excluir() {
		IDaoUsuario ldao = new DaoUsuario();
		Usuario usuario = getUsuarioFromEditOrDelete();
		ldao.excluir(usuario);
		getTodos();
		return "sucessoDeleteEstado";

	}

Qdo clicko em editar ele chama uma pagina de edicao ja com o bean setado com o usuario referente a linha que eu selecionei.
espero que ajude,abraços.

Dá uma olhada nessa área do meu blog talvez ajude você: http://javawora.blogspot.com/search/label/JSF 8)

LgWeb,

Me diz uma coisa eu to implementado o filterBy no rich:column. So que quando eu faço isso não consigo pegar a linha correta do meu datatable. Quando clico na linha so pega a ultima linha do datatable, se eu tirar o filter consigo pegar a linha correta normalmente. Estou usando o Richfaces 3.2SR1, o que será que estou fazendo de errado?

<?xml version="1.0" encoding="ISO-8859-1" ?>

<jsp:root xmlns:jsp="http://java.sun.com/JSP/Page"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:a4j="http://richfaces.org/a4j"
xmlns:rich=“http://richfaces.org/rich”>

<ui:composition template="/jsp/template.jspx">
	<ui:define name="conteudo">
		<a4j:form>
			<table width="100%" align="right">
				<tr id="lStatus">
					<td colspan="2" align="right"><a4j:status id="commonstatus"
						startText="PROCESSANDO ..." /></td>
				</tr>
				<tr id="lTitulo">
					<td class="lTitulo" width="90%">
						Assunto
					</td>
					<td align="right" width="10%"><h:outputLink style="float:right;"
						value="javascript:Richfaces.showModalPanel('mpFormulario',{width:500, top:50})">
						<h:graphicImage url="/imagens/icones/novo.png" border="0" />
						<rich:toolTip>
							<span style="white-space: nowrapcolor :                   #000;">
							Novo Assunto. </span>
						</rich:toolTip>
					</h:outputLink></td>
				</tr>
				<tr id="lMensagens">
					<td colspan="2"><rich:messages passedLabel="" layout="list">
						<f:facet name="header">
							<h:outputText value="Entered Data Status:"></h:outputText>
						</f:facet>
						<f:facet name="passedMarker">
							<h:graphicImage value="" />
						</f:facet>
						<f:facet name="errorMarker">
							<h:graphicImage value="/imagens/icones/cross.png" />
						</f:facet>
					</rich:messages></td>
				</tr>
				<tr id="lCorpo">
					<td colspan="2">
					<a4j:region>
						<rich:dataTable styleClass="centralizar" width="400"
							id="lstAssunto" style="margin: 0 right;" rows="10"
							columnClasses="col" value="#{cadastroAssunto.todos}"
							var="decorador">

							<f:facet name="header">
								<rich:columnGroup>
									<rich:column width="1%">
										<a4j:commandButton alt="Remover Todos" title="Remover Todos"
											action="#{ cadastroAssunto.excluirTodos }"
											image="/imagens/icones/cross.png"
											reRender="lstAssunto, frmAssunto">
											<rich:toolTip>
												<span style="white-space: nowrapcolor :             #000;">
												Clicando aqui será possivel excluir todos os registros
												marcados. </span>
											</rich:toolTip>
										</a4j:commandButton>
									</rich:column>
									<rich:column width="60%">
										<h:outputText styleClass="headerText" value="Descrição" />
									</rich:column>

									<rich:column width="30%">
										<h:outputText styleClass="headerText"
											value="Setores que Utilizam este Assunto" />
									</rich:column>

									<rich:column width="9%">
										<h:outputText styleClass="headerText" value="" />
									</rich:column>
								</rich:columnGroup>
							</f:facet>
							<rich:column style="text-align: center;">
								<h:selectBooleanCheckbox value="#{ decorador.remover }">
									<rich:toolTip>
										<span style="white-space: nowrap;"> Marcando varios
										será possivel a exclusão de varios registro de uma so vez.
										Basta marcar o registro desejados e clicar no X vermelho. </span>
									</rich:toolTip>
								</h:selectBooleanCheckbox>
							</rich:column>

							<rich:column>
								<h:outputText value="#{ decorador.object.descricao }" />
							</rich:column>

							<rich:column>
								<f:facet name="header">
									<h:inputText value="#{cadastroAssunto.filtro.setor.descricao}"
										id="txtFiltroSetor">
										<a4j:support event="onkeyup" reRender="lstAssunto"
											ignoreDupResponses="true" requestDelay="700"
											focus="txtFiltroSetor" />
									</h:inputText>
								</f:facet>
								<a4j:repeat value="#{decorador.object.setores}" var="setor">
									<h:outputText value="#{setor.descricao}" />
									<br />
								</a4j:repeat>
							</rich:column>


							<rich:column style="text-align: center;">									
								<a4j:commandButton alt="Editar" title="Editar"
									action="#{ cadastroAssunto.atualizar }"
									image="/imagens/icones/edit.png" onclick="javascript:Richfaces.showModalPanel('mpFormulario',{width:500, top:50})"
									reRender="lstAssunto, frmAssunto">
									<rich:toolTip>
										<span style="white-space: nowrap"> Clicando aqui este
										registro será excluido. </span>
									</rich:toolTip>
								</a4j:commandButton>
								<a4j:commandButton alt="Excluir" title="Excluir"
									action="#{ cadastroAssunto.excluir }"
									image="/imagens/icones/bin.png"
									reRender="lstAssunto, frmAssunto">
									<rich:toolTip>
										<span style="white-space: nowrap"> Clicando aqui este
										registro pode ser editado. </span>
									</rich:toolTip>
								</a4j:commandButton>
							</rich:column>
						</rich:dataTable>
						<rich:spacer height="10" />
						<rich:datascroller for="lstAssunto" maxPages="10" align="center" />
					</a4j:region></td>
				</tr>

			</table>
		</a4j:form>

		<!-- Listagem -->
		<rich:spacer />
		
		<ui:include src="formulario.jspx" />
		
		<ui:include src="novosetor.jspx" />
	</ui:define>
</ui:composition>

</jsp:root>

Isto é um bug amigo veja
http://www.jboss.com/index.html?module=bb&op=viewtopic&t=133192
Demorei mas respondi.