Oi pessoal.
Preciso de algum exemplo de edição de datatable em JSF 1.1. Vou explicar o contexto:
Tenho um cadastro de pedidos que relaciona-se com um de produtos, ou seja, um pedido é composto de itens de produtos.
Quero fazer uma datatable dinamica onde voce adiciona novos itens apartir de um clique do botão ou retira linhas de outro!
Abaixo um prototipo do que eu quero fazer:
Consigo preencher o combo pelo backbean mas não faço idéia de como adicionar ou retirar linhas da datatable de acordo com a seleção…
Alguem conhece algum exemplo? Segue código do bean:
public List getProdutos() {
if (produtos == null) {
ProdutoDelegate delegate = new ProdutoDelegate();
produtos = delegate.pesquisarProdutos();
}
return produtos;
}
Agora do jsp:
[code]<h:dataTable id=“pedidosTable” value="#{backing_Pedido.itensPedido}" binding="#{backing_Pedido.pedidosTable}" rendered=“true” var=“itens”>
<h:column>
<f:facet name=“header”>
<h:outputText value=“Id”/>
</f:facet>
<h:outputText value="#{itens.id}"/>
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="Produto"/>
</f:facet>
<h:selectOneMenu id="selectProduto" value="#{itens.produto}">
<f:selectItem id="item1" itemLabel="Produto1" itemValue="1" />
</h:selectOneMenu>
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="Quantidade"/>
</f:facet>
<h:inputText value="#{itens.quantidade}"/>
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="Valor"/>
</f:facet>
<h:inputText value="#{itens.valorUnitarioCompra}"/>
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="Editar"/>
</f:facet>
<h:commandButton value="+"/>
<h:commandButton value="-"/>
</h:column>
</h:dataTable>[/code]
Obrigado!
public List getItensPedido() {
ItemPedido item = new ItemPedido();
item.setId(new Long(666));
item.setProduto((Produto)getProdutos().get(0));
item.setQuantidade(new Long(1));
item.setValorUnitarioCompra(new Float(28.09));
itensPedido.add(item);
return itensPedido;
}
Implementei dois métodos dos botões e coloquei o bean em escopo de sessão para funcionarem.
Ele adiciona e remove os itens da collection PORÉM estou com um problema chato!
Não há como recuperar os valores que o cara preencheu nos campos! :lol:
Embora a collection receba mais itens ela não é atualizada… :roll:
Instalei o tomahawk aqui na esperança de fazer isso funcionar, mas ainda assim não consigo recuperar os valores digitados nos campos…
[code]<t:dataTable id=“pedidosTable” value="#{backing_Pedido.itensPedido}"
binding="#{backing_Pedido.pedidosTable}" rendered="#{not empty backing_Pedido.itensPedido}" var=“itens”
preserveRowStates=“true” preserveDataModel=“true”>
<t:column>
<f:facet name=“header”>
<h:outputText value=“Id”/>
</f:facet>
<h:outputText value="#{itens.id}"/>
</t:column>
<t:column>
<f:facet name="header">
<h:outputText value="Produto"/>
</f:facet>
<h:selectOneMenu id="selectProduto" value="#{itens.produto}">
<f:selectItems value="#{backing_Pedido.produtosComboBox}" />
</h:selectOneMenu>
</t:column>
<t:column>
<f:facet name="header">
<h:outputText value="Quantidade"/>
</f:facet>
<h:inputText value="#{itens.quantidade}"/>
</t:column>
<t:column>
<f:facet name="header">
<h:outputText value="Valor"/>
</f:facet>
<h:inputText value="#{itens.valorUnitarioCompra}"/>
</t:column>
<t:column>
<f:facet name="header">
<h:outputText value="Editar"/>
</f:facet>
<h:commandButton value="+" action="#{backing_Pedido.novoItem}" type="submit" immediate="true"/>
<h:commandButton value="-" action="#{backing_Pedido.retiraItem}" type="submit" immediate="true"/>
</t:column>
</t:dataTable>[/code]
É mais dificil do que eu pensava… :oops:
public String salvarPedido() {
Object obj = pedidosTable.getValue();
if (itensPedido.size() > 0) {
System.out.println("OK!");
}
return null;
}
Este metodo era pra pegar o array preenchido, mas os objetos vem todos vazios… PQP porque esta merda é tão dificil?
Pra trabalhar com JSF o cara tem que ser monge budista. Nâo tem produtividade nenhuam esta merda de framework desgraçado. :twisted: :twisted: :twisted: :twisted: :twisted: :x :x :x :x
Agora ao clicar no novo ele começa a dar pau no JSF de nullpointer exception:
500 Internal Server Error
java.lang.NullPointerException at com.sun.faces.context.RequestMap.put(ExternalContextImpl.java:642) at org.apache.myfaces.custom.selectitems.AbstractUISelectItems.putIteratorToRequestParam(AbstractUISelectItems.java:131) at org.apache.myfaces.custom.selectitems.AbstractUISelectItems.createSelectItems(AbstractUISelectItems.java:96) at org.apache.myfaces.custom.selectitems.AbstractUISelectItems.getValue(AbstractUISelectItems.java:75) at org.apache.myfaces.shared_tomahawk.util.SelectItemsIterator.hasNext(SelectItemsIterator.java:127) at org.apache.myfaces.shared_tomahawk.renderkit.RendererUtils.internalGetSelectItemList(RendererUtils.java:451) at org.apache.myfaces.shared_tomahawk.renderkit.RendererUtils.getSelectItemList(RendererUtils.java:429) at org.apache.myfaces.shared_tomahawk.renderkit.html.HtmlRendererUtils.internalRenderSelect(HtmlRendererUtils.java:303) at org.apache.myfaces.shared_tomahawk.renderkit.html.HtmlRendererUtils.renderMenu(HtmlRendererUtils.java:276) at org.apache.myfaces.shared_tomahawk.renderkit.html.HtmlMenuRendererBase.encodeEnd(HtmlMenuRendererBase.java:59) at org.apache.myfaces.renderkit.html.ext.HtmlMenuRenderer.encodeEnd(HtmlMenuRenderer.java:70) at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:740) at org.apache.myfaces.shared_tomahawk.renderkit.RendererUtils.renderChild(RendererUtils.java:420) at org.apache.myfaces.shared_tomahawk.renderkit.RendererUtils.renderChildren(RendererUtils.java:401) at org.apache.myfaces.shared_tomahawk.renderkit.RendererUtils.renderChild(RendererUtils.java:418) at org.apache.myfaces.renderkit.html.ext.HtmlTableRenderer.renderColumnBody(HtmlTableRenderer.java:731) at org.apache.myfaces.shared_tomahawk.renderkit.html.HtmlTableRendererBase.encodeColumnChild(HtmlTableRendererBase.java:324) at org.apache.myfaces.renderkit.html.ext.HtmlTableRenderer.encodeColumnChild(HtmlTableRenderer.java:615) at org.apache.myfaces.shared_tomahawk.renderkit.html.HtmlTableRendererBase.encodeInnerHtml(HtmlTableRendererBase.java:300) at org.apache.myfaces.shared_tomahawk.renderkit.html.HtmlTableRendererBase.encodeChildren(HtmlTableRendererBase.java:140) at org.apache.myfaces.renderkit.html.ext.HtmlTableRenderer.encodeChildren(HtmlTableRenderer.java:280) at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:721) at javax.faces.webapp.UIComponentTag.encodeChildren(UIComponentTag.java:629) at javax.faces.webapp.UIComponentTag.doEndTag(UIComponentTag.java:566) at _Pedido._jspService(_Pedido.java:479) [/Pedido.jsp] at com.orionserver[Oracle Containers for J2EE 10g (10.1.3.4.0) ].http.OrionHttpJspPage.service(OrionHttpJspPage.java:59) at oracle.jsp.runtimev2.JspPageTable.compileAndServe(JspPageTable.java:724) at oracle.jsp.runtimev2.JspPageTable.service(JspPageTable.java:414) at oracle.jsp.runtimev2.JspServlet.internalService(JspServlet.java:594) at oracle.jsp.runtimev2.JspServlet.service(JspServlet.java:518) at javax.servlet.http.HttpServlet.service(HttpServlet.java:856) at com.evermind[Oracle Containers for J2EE 10g (10.1.3.4.0) ].server.http.ServletRequestDispatcher.invoke(ServletRequestDispatcher.java:713) at com.evermind[Oracle Containers for J2EE 10g (10.1.3.4.0) ].server.http.ServletRequestDispatcher.forwardInternal(ServletRequestDispatcher.java:370) at com.evermind[Oracle Containers for J2EE 10g (10.1.3.4.0) ].server.http.ServletRequestDispatcher.unprivileged_forward(ServletRequestDispatcher.java:287) at com.evermind[Oracle Containers for J2EE 10g (10.1.3.4.0) ].server.http.ServletRequestDispatcher.access$100(ServletRequestDispatcher.java:51) at com.evermind[Oracle Containers for J2EE 10g (10.1.3.4.0) ].server.http.ServletRequestDispatcher$2.oc4jRun(ServletRequestDispatcher.java:193) at oracle.oc4j.security.OC4JSecurity.doPrivileged(OC4JSecurity.java:284) at com.evermind[Oracle Containers for J2EE 10g (10.1.3.4.0) ].server.http.ServletRequestDispatcher.forward(ServletRequestDispatcher.java:198) at com.sun.faces.context.ExternalContextImpl.dispatch(ExternalContextImpl.java:346) at com.sun.faces.application.ViewHandlerImpl.renderView(ViewHandlerImpl.java:152) at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:107) at com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:245) at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:137) at javax.faces.webapp.FacesServlet.service(FacesServlet.java:214) at com.evermind[Oracle Containers for J2EE 10g (10.1.3.4.0) ].server.http.ResourceFilterChain.doFilter(ResourceFilterChain.java:64) at org.apache.myfaces.webapp.filter.ExtensionsFilter.doFilter(ExtensionsFilter.java:301) at com.evermind[Oracle Containers for J2EE 10g (10.1.3.4.0) ].server.http.ServletRequestDispatcher.invoke(ServletRequestDispatcher.java:623) at com.evermind[Oracle Containers for J2EE 10g (10.1.3.4.0) ].server.http.ServletRequestDispatcher.forwardInternal(ServletRequestDispatcher.java:370) at com.evermind[Oracle Containers for J2EE 10g (10.1.3.4.0) ].server.http.HttpRequestHandler.doProcessRequest(HttpRequestHandler.java:871) at com.evermind[Oracle Containers for J2EE 10g (10.1.3.4.0) ].server.http.HttpRequestHandler.processRequest(HttpRequestHandler.java:453) at com.evermind[Oracle Containers for J2EE 10g (10.1.3.4.0) ].server.http.HttpRequestHandler.serveOneRequest(HttpRequestHandler.java:221) at com.evermind[Oracle Containers for J2EE 10g (10.1.3.4.0) ].server.http.HttpRequestHandler.run(HttpRequestHandler.java:122) at com.evermind[Oracle Containers for J2EE 10g (10.1.3.4.0) ].server.http.HttpRequestHandler.run(HttpRequestHandler.java:111) at oracle.oc4j.network.ServerSocketReadHandler$SafeRunnable.run(ServerSocketReadHandler.java:260) at oracle.oc4j.network.ServerSocketAcceptHandler.procClientSocket(ServerSocketAcceptHandler.java:234) at oracle.oc4j.network.ServerSocketAcceptHandler.access$700(ServerSocketAcceptHandler.java:29) at oracle.oc4j.network.ServerSocketAcceptHandler$AcceptHandlerHorse.run(ServerSocketAcceptHandler.java:879) at com.evermind[Oracle Containers for J2EE 10g (10.1.3.4.0) ].util.ReleasableResourcePooledExecutor$MyWorker.run(ReleasableResourcePooledExecutor.java:303) at java.lang.Thread.run(Thread.java:595)
:roll: :roll: :roll: :roll:
Acho que tentarei resolver isso com um popup. O que acham?
:lol: