Meu problema é no método excluirContatoPresidente(); quando ele chama o getRowData.
Se alguém puder me ajudar ficarei eternamente grato.
Também estou usando o <a4j:keepAlive beanName=“faclube” />, não sei se isso pode interfeir em alguma coisa.
[code]public void excluirContatoPresidente()
{
ContatoOnline elemento = (ContatoOnline) tabelaContatoPresidente.getRowData();
listContatosOnlinePresidenteAdicionados.remove(elemento);
}[/code]
<rich:dataTable var="contato" value="#{faclube.listContatosOnlinePresidenteAdicionados}"
onRowMouseOver="this.style.backgroundColor='#A8A8A8'"
onRowMouseOut="this.style.backgroundColor='#{a4jSkin.tableBackgroundColor}'"
binding="#{faclube.tabelaContatoPresidente}"
width="100%">
<rich:column sortBy="#{contato.tipo}" >
<f:facet name="header">
Tipo
</f:facet>
<h:outputText value="#{contato.tipo}" />
</rich:column>
<rich:column sortBy="#{contato.nome}" >
<f:facet name="header">
Nome
</f:facet>
<h:outputText value="#{contato.nome}" />
</rich:column>
<rich:column style="text-align:center;">
<f:facet name="header">
Excluir
</f:facet>
<a4j:commandLink action="#{faclube.excluirContatoPresidente}">
<h:graphicImage value="../imagens/icones/delete.gif" style="cursor:pointer" />
</a4j:commandLink>
</rich:column>
</rich:dataTable>
E está me gerando a seguinte exceção:
javax.faces.model.NoRowAvailableException
javax.faces.model.ListDataModel.getRowData(ListDataModel.java:150)
org.ajax4jsf.model.SequenceDataModel.getRowData(SequenceDataModel.java:147)
org.ajax4jsf.component.UIDataAdaptor.getRowData(UIDataAdaptor.java:257)
officeMusic.action.FaclubeBean.excluirContatoPresidente(FaclubeBean.java:98)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
java.lang.reflect.Method.invoke(Method.java:597)
org.apache.el.parser.AstValue.invoke(AstValue.java:172)
org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:276)
com.sun.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:68)
javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:88)
org.apache.myfaces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:57)
javax.faces.component.UICommand.broadcast(UICommand.java:387)
org.ajax4jsf.component.AjaxActionComponent.broadcast(AjaxActionComponent.java:55)
org.ajax4jsf.component.UIDataAdaptor.broadcast(UIDataAdaptor.java:1383)
org.ajax4jsf.component.AjaxViewRoot.processEvents(AjaxViewRoot.java:321)
org.ajax4jsf.component.AjaxViewRoot.broadcastEvents(AjaxViewRoot.java:296)
org.ajax4jsf.component.AjaxViewRoot.processPhase(AjaxViewRoot.java:253)
org.ajax4jsf.component.AjaxViewRoot.processApplication(AjaxViewRoot.java:466)
com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:82)
com.sun.faces.lifecycle.Phase.doPhase(Phase.java:100)
com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
javax.faces.webapp.FacesServlet.service(FacesServlet.java:265)
org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:178)
org.ajax4jsf.webapp.BaseFilter.handleRequest(BaseFilter.java:290)
org.ajax4jsf.webapp.BaseFilter.processUploadsAndHandleRequest(BaseFilter.java:390)
org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:517)
o que retorna nesse método faclube.listContatosOnlinePresidenteAdicionados ?
coloca ele ai?
Retorna uma lista de objetos da classe ContatoOnline.
Estou no trabalho e esse projeto eu estou fazendo em casa, mas acho que tudo que é realmente relevante eu já coloquei no post.
Esse você já usou esse getRowData no HtmlDataTable?? Rodou legal??? Não faço idéia do pq não está funcionando.
ja usei…roda susse…
mas é o seguinte… esse método faclube.listContatosOnlinePresidenteAdicionados não pode retornar uma lista né… tem que retornar um DataModel…manja??
por ex:
private DataModel tabela;
get e set
...
//esse método que vc chama no seu dataTable
public DataModel getConsultaTodos()
{
try
{
return tabela = new ListDataModel(agenciaDao.findAll()) ;
}
catch (Exception e)
{
super.tratarExcecao(e, "getConsultaTodos");
return new ListDataModel();
}
}
No value dele eu passo o DataModel???
Pensei que com o binding e chamando a ação dentro dele já seria o suficiente para eu conseguir usar o getRowData();
o objeto tabelaContatoPresidente nesse caso é um HtmlDataTable…
Tem como vc me mostrar mais desse seu código para eu dar uma olhada???
Se pude me mostrar como fica a tag da tabela tb ficaria grato.
isso passa o dataModel…igual no exemplo q mostrei antes… o método getConsultaTodos…
nem precisa usar o biding…
<rich:dataTable var="contato" value="#{bean.consultaTodos}"
onRowMouseOver="this.style.backgroundColor='#A8A8A8'"
onRowMouseOut="this.style.backgroundColor='#{a4jSkin.tableBackgroundColor}'"
width="100%">
...
</rich:dataTable>
consultaTodos é o exemplo q te passei antes…
O DataModel possui o método getRowData()???
Assim que chegar em casa eu vou testar desse jeito.
tem sim
/**
* Obtem a agencia que foi selecionada na tabela de consulta
* @return
*/
public Agencia getAgenciaTabela()
{
return (Agencia) tabela.getRowData();
}
Funcionou.
Mas não sei pq estava dando errado usando o binding do HtmlDataList.
Valeu mesmo!!!
Pessoal aproveitando o topic to tomando a merma exception.
Seguinte, tenho um datatable que preciso que ao clicar numa linha, ele redirecione pra outro xhtml com 2 formularios de objetos povoados pra eu poder editar ( eh nessa hora q tomo o norowavaibleexception ) .
O outro “bug” que ocorre é o seguinte, quando eu clico no informaçoes do responsavel pra abrir o dialog, ele abre vazio, só apos eu selecionar uma linha e apertar f5 eh que ele provavelmente ta selecionando… acho q deu pra entender ± oq ta acontecendo… ai vão os codigos
<p:dataTable var="solicitacao" value="#{solicitanteBean.listaSolicitacoes}"
selection="#{solicitanteBean.solicitacaoSelecionada}"
selectionMode="single">
<f:facet name="header">
Selecione uma solicitação e depois clique na ação desejada
</f:facet>
<p:column selectionMode="single" />
<p:column>
<f:facet name="header">
Data Solicitada
</f:facet>
<h:outputText value="#{solicitacao.datasolicitada}" />
</p:column>
<p:column>
<f:facet name="header">
Motivo
</f:facet>
<h:outputText value="#{solicitacao.motivo}" />
</p:column>
<p:column>
<f:facet name="header">
Espaço Restrito
</f:facet>
<h:outputText value="#{solicitacao.espacorestrito}" />
</p:column>
<p:column>
<f:facet name="header">
Endereço
</f:facet>
<h:outputText value="#{solicitacao.solicitante.endereco}" />
</p:column>
<p:column>
<f:facet name="header">
Responsável
</f:facet>
<h:outputText value="#{solicitacao.usuario.nome}" />
</p:column>
<p:column>
<f:facet name="header">
Situação
</f:facet>
<h:outputText value="#{solicitacao.status}" />
</p:column>
<f:facet name="footer">
<p:commandButton value="Informações do Responsável" image="ui-icon ui-icon-search"
update="form:display" oncomplete="solicitacaoDialog.show()"/>
<p:commandButton value="Editar" image="ui-icon ui-icon-wrench"
action="#{solicitanteBean.editarSolicitacao}" ajax="false" />
<p:commandButton value="Remover" image="ui-icon ui-icon-trash"
update="form:display" oncomplete="carDialog.show()"/>
</f:facet>
</p:dataTable>
<p:dialog header="Informações do Responsável" widgetVar="solicitacaoDialog" resizable="false"
width="500" showEffect="clip" hideEffect="fold">
<h:panelGrid id="display" columns="2" cellpadding="4">
<h:outputText value="Nome:" />
<h:outputText value="#{solicitanteBean.solicitacaoSelecionada.usuario.nome}" />
<h:outputText value="Matrícula" />
<h:outputText value="#{solicitanteBean.solicitacaoSelecionada.usuario.matricula}" />
</h:panelGrid>
</p:dialog>
e o bean:
@Named(value = "solicitanteBean")
@SessionScoped
public class SolicitanteBean implements Serializable {
@EJB
private SolicitanteDAO solicitanteDAO;
@EJB
private SolicitacaoDAO solicitacaoDAO;
private Solicitante solicitante = new Solicitante();
private Solicitacao solicitacao = new Solicitacao();
private List<Solicitante> solicitantes;
private List<Solicitacao> solicitacoes;
public DataModel listaSolicitacoes;
private Solicitacao solicitacaoSelecionada;
public DataModel getListaSolicitacoes() {
List<Solicitacao> listaSolicitacao = new ArrayList<Solicitacao>();
listaSolicitacao.addAll(solicitacaoDAO.listar());
listaSolicitacoes = new ListDataModel(listaSolicitacao);
return listaSolicitacoes;
}
public void setListaSolicitacoes(DataModel listaSolicitacoes) {
this.listaSolicitacoes = listaSolicitacoes;
}
// Construtor vazio
public SolicitanteBean() {
}
public void novo() {
solicitante = new Solicitante();
solicitacao = new Solicitacao();
}
/**
* Método que recupera o objeto selecionado na tabela de consulta e redireciona para a tela de editar.
*/
public String editarSolicitacao() {
Solicitacao selectsolicitacao = (Solicitacao) listaSolicitacoes.getRowData();
this.solicitacao = selectsolicitacao;
this.solicitante = selectsolicitacao.getSolicitante();
System.out.println("editarsolicitacao");
return "solicitante";
}
//gets e sets
desde já agradeço mto!