Pessoal, preciso de uma ajuda.
Tenho uma data table dentro de um p:dialog que está dentro da minha template xhtml. Estou usando facelets e minha estrutura está assim:
template -> admin ->create -> create_quotation_modulo
na create_quotation_modulo.xhtml eu tenho um p:commandButton que chama este modal. Este commandbutton é criado dinamicamente na classe java, dependendo do retorno do banco. Segue código:
else if(conteudoModulo.getConteudoItemModulo().equals("button")){
UIOutput labelInputText = new UIOutput();
labelInputText.setId("label_button_"+contador);
labelInputText.getAttributes().put("style", "margin-left:5px; font-size: 85%;");
labelInputText.setValue(ContextoBean.getBundle().getString("web_"+conteudoModulo.getItemModulo()) + ":");
panelgrid.getChildren().add(labelInputText);
InputText inputText = new InputText();
inputText.setDisabled(true);
inputText.setId(conteudoModulo.getItemModulo()+"_text_"+contador);
inputText.getAttributes().put("style", conteudoModulo.getTamanhoCampo());
inputText.setValueExpression("value", createValueExpression("#{criarCotacaoController."+nomeListaResultado+"[" + (listaResultado.size()) + "]}", String.class));
listaResultado.add("");
listaComponentes.add(conteudoModulo.getItemModulo());
panelgrid.getChildren().add(inputText);
MethodBinding action = application.createMethodBinding("#{criarCotacaoController.habilitaBuscaProduto}", null);
CommandButton button2 = new CommandButton();
button2.setId("btn_prime_"+contador);
button2.setValue(ContextoBean.getBundle().getString("btn_pesquisar"));
button2.setUpdate("form_quotation");
button2.setAction(action);
panelgrid.getChildren().add(button2);
}
public void habilitaBuscaProduto(){
listaProdutoModel = new ProdutoDataModel();
codigoDescricaoProcurado = "";
org.primefaces.context.RequestContext.getCurrentInstance().execute("dlgPesquisaCodigoProduto.show()");
}
No dlgPesquisaCodigoProduto eu tenho meu filtro de busca e minha tabela, onde eu posso selecionar 1 item. Segue código:
<p:dialog modal="true" widgetVar="statusDialog"
header="#{msgs.web_global_emprocessamento}" draggable="false"
closable="false">
<p:graphicImage value="/resources/images/template/ajaxloadingbar.gif" />
</p:dialog>
<p:dialog widgetVar="dlgPesquisaCodigoProduto" id="idDlgPesquisaCodigoProduto" modal="true" resizable="false">
<h:form id="form_pesquisa_codigo_produto">
<p:growl id="msg" showDetail="false" escape="false" />
<p:panelGrid styleClass="semBorda" columns="1">
<h:outputLabel value="#{msgs.global_selecione_tipo_pesquisa}:" for="select_tipo_pesquisa_codigo_produto" />
<p:selectOneMenu id="select_tipo_pesquisa_codigo_produto" required="true" requiredMessage="#{msgs.global_campo_obrigatorio}"
value="#{criarCotacaoController.tipoPesquisaSelecionada}"
converter="simpleEntityConverter"
style="width:210px; margin-left:8px;">
<f:selectItems value="#{criarCotacaoController.listaTipoPesquisaCodigoProduto}" />
</p:selectOneMenu>
</p:panelGrid>
<p:panelGrid styleClass="semBorda" columns="3">
<p:inputText id="codigo_descricao_procurado" required="true" requiredMessage="#{msgs.global_campo_obrigatorio}"
value="#{criarCotacaoController.codigoDescricaoProcurado}" style="width:250px;" />
<h:commandButton id="procurar_codigo_produto" value="#{msgs.web_global_buscar}"
actionListener="#{criarCotacaoController.procurarCodigoProduto()}"
onclick="statusDialog.show();" oncomplete="javascript:fecha(xhr, status, args);"
styleClass="btn_procurar_user" update=":form_pesquisa_codigo_produto:tabela_resultado_pesquisa" />
</p:panelGrid>
<br />
<p:dataTable id="tabela_resultado_pesquisa"
styleClass="tabela_resultado_pesquisa" var="produto"
value="#{criarCotacaoController.listaProdutoModel}"
paginator="true" rows="10" rowKey="#{produto.descricao}"
selection="#{criarCotacaoController.produtoSelecionado}"
selectionMode="single" emptyMessage="#{msgs.global_nenhum_registro}">
<p:ajax event="rowSelect"
listener="#{criarCotacaoController.produtoSelecionado}"
oncomplete="self.location= 'Edit_user.jsf';" />
<f:facet name="header">
<h:outputLabel value="#{msgs.global_resultado_pesquisa}" />
</f:facet>
<p:column
style="max-width: 250px; min-width: 250px; overflow: hidden; text-align: center">
<f:facet name="header">
<h:outputText value="#{msgs.global_codigo_produto}" />
</f:facet>
<h:outputText value="#{produto.id}" />
</p:column>
<p:column
style="max-width: 400px; min-width: 400px; overflow: hidden">
<f:facet name="header">
<h:outputText value="#{msgs.global_descricao_produto}" />
</f:facet>
<h:outputText value="#{produto.descricao}" />
</p:column>
</p:dataTable>
</h:form>
</p:dialog>
Segue o código do meu bean, de busca (ainda com a busca fake):
public void procurarCodigoProduto() {
listaProdutoPesquisado = new ArrayList<Produto>();
listaProdutoPesquisado.add(new Produto(1234567, "Produto1"));
listaProdutoPesquisado.add(new Produto(3242423, "Produto2"));
listaProdutoPesquisado.add(new Produto(6551234, "Produto3"));
listaProdutoPesquisado.add(new Produto(5678654, "Produto4"));
listaProdutoPesquisado.add(new Produto(9865327, "Produto5"));
listaProdutoPesquisado.add(new Produto(3172350, "Produto6"));
listaProdutoModel = new ProdutoDataModel(listaProdutoPesquisado);
requestContext = RequestContext.getCurrentInstance();
requestContext.addCallbackParam("fechar", false);
}
código do meu ProdutoDataModel:
package br.com.gd.bpp.controller.datamodel;
import java.util.List;
import javax.faces.model.ListDataModel;
import org.primefaces.model.SelectableDataModel;
import br.com.gd.bpp.core.dominio.infra.Produto;
public class ProdutoDataModel extends ListDataModel<Produto> implements SelectableDataModel<Produto> {
public ProdutoDataModel() {
// TODO Auto-generated constructor stub
}
public ProdutoDataModel(List<Produto> data) {
super(data);
}
@SuppressWarnings("unchecked")
@Override
public Produto getRowData(String rowKey) {
List<Produto> listaProduto = (List<Produto>) getWrappedData();
for(Produto produto : listaProduto) {
if(produto.getDescricao().equals(rowKey)){
return produto;
}
}
return null;
}
@Override
public Object getRowKey(Produto produto) {
return produto.getDescricao();
}
}
Quando eu clico em Buscar, dentro do meu modal, eu tenho o seguinte erro:
INFO: 10:32:40,978 ERROR MyFilterSecurityInterceptor:64 - Exception: javax.servlet.ServletException
javax.servlet.ServletException
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:606)
at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1542)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:343)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:217)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:368)
at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:109)
at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:83)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
at br.com.gd.bpp.security.MyFilterSecurityInterceptor.invoke(MyFilterSecurityInterceptor.java:62)
at br.com.gd.bpp.security.MyFilterSecurityInterceptor.doFilter(MyFilterSecurityInterceptor.java:42)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:97)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:100)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:78)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
at org.springframework.security.web.authentication.rememberme.RememberMeAuthenticationFilter.doFilter(RememberMeAuthenticationFilter.java:119)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:54)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:35)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:187)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:105)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:79)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
at org.springframework.security.web.session.ConcurrentSessionFilter.doFilter(ConcurrentSessionFilter.java:109)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
at org.springframework.security.web.access.channel.ChannelProcessingFilter.doFilter(ChannelProcessingFilter.java:109)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:169)
at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:237)
at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:167)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:256)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:217)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:279)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:655)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:595)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:161)
at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:331)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:231)
at com.sun.enterprise.v3.services.impl.ContainerMapper$AdapterCallable.call(ContainerMapper.java:317)
at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:195)
at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:849)
at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:746)
at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1045)
at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:228)
at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137)
at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104)
at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90)
at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79)
at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54)
at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59)
at com.sun.grizzly.ContextTask.run(ContextTask.java:71)
at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532)
at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513)
at java.lang.Thread.run(Thread.java:662)
Caused by: java.lang.NullPointerException
at org.primefaces.component.datatable.DataTable.getRowData(DataTable.java:794)
at org.primefaces.component.datatable.feature.SelectionFeature.decodeSingleSelection(SelectionFeature.java:46)
at org.primefaces.component.datatable.feature.SelectionFeature.decode(SelectionFeature.java:37)
at org.primefaces.component.datatable.DataTableRenderer.decode(DataTableRenderer.java:53)
at javax.faces.component.UIComponentBase.decode(UIComponentBase.java:787)
at org.primefaces.component.api.UIData.processDecodes(UIData.java:224)
at javax.faces.component.UIForm.processDecodes(UIForm.java:225)
at javax.faces.component.UIComponentBase.processDecodes(UIComponentBase.java:1176)
at org.primefaces.component.dialog.Dialog.processDecodes(Dialog.java:352)
at javax.faces.component.UIComponentBase.processDecodes(UIComponentBase.java:1176)
at javax.faces.component.UIComponentBase.processDecodes(UIComponentBase.java:1176)
at javax.faces.component.UIViewRoot.processDecodes(UIViewRoot.java:933)
at com.sun.faces.lifecycle.ApplyRequestValuesPhase.execute(ApplyRequestValuesPhase.java:78)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:593)
... 60 more
Alguém sabe oq pode esta acontecendo? ja estou a 3 dias quebrando a cabeça com isto…