Setar input com valor escolhido em outra aba

24 views
Skip to first unread message

Sérgio Fantin

unread,
Mar 19, 2009, 5:43:19 PM3/19/09
to javasf: JavaServer Faces International Group
Olá pessoal,

preciso setar um input com o valor que foi escolhido em um combo de
outra aba.

O combo que está na primeira aba:

<h:selectOneMenu id="categoria" value="#{categoriaFace.categoria.id}"
rendered="true">
<f:selectItems value="#{categoriaFace.categorias}" />
<a4j:support event="onchange" ajaxSingle="false" action="#
{categoriaFace.actionCarregaComboSubcategoria}"
reRender="categoria,subcategoria,tableParams" />
</h:selectOneMenu>

O input que está na segunda aba:
<h:inputText id="cat" value="#{categoriaFace.categoria}"
styleClass="edit" style=" width : 254px;" />

O bean está em escopo de "request" + <a4j:keepAlive
beanName="categoriaFace" />

Agradeço antecipadamente!

Bruno maomeH

unread,
Mar 20, 2009, 8:06:19 AM3/20/09
to jav...@googlegroups.com
se eu entendi, você pode fazer isso via javascript sem nenhum problema..

mas pelo modo que você está fazendo..
no #{categoriaFace.actionCarregaComboSubcategoria}"
você pode popular o inputText.. e manda reRenderizar ele no a4j:suport

<a4j:support ... reRender="cat, categoria,subcategoria,tableParams"
<h:inputText id="cat" ... />


2009/3/19 Sérgio Fantin <sergio.l...@gmail.com>



--
   C. SOARES - Bruno,
   C. COMPUTAÇÃO - Unifor,
   C. MAGALHÃES - Desenvolvedor.

Sérgio Fantin

unread,
Mar 20, 2009, 11:14:18 AM3/20/09
to jav...@googlegroups.com
Opa, (quase) deu certo!

Mandei setar o valor no MB e depois reRenderizar com a4j:suport. Só há um problema... eu só consigo passar o id, por ex: <h:inputText id="cat" value="#{categoriaFace.inputCategoria.id}" ele seta o id certinho, mas se eu tento mostrar uma String, por ex: <h:inputText id="cat" value="#{categoriaFace.inputCategoria.nome}" nada é mostrado, deve ser problema de converter. Menos mau.

Abraço...

Bruno maomeH

unread,
Mar 20, 2009, 1:15:52 PM3/20/09
to jav...@googlegroups.com
isso é pq vc está passando um id como value pro h:selectOneMenu.. o ideal seria você enviar o objeto inteiro.. e sobreescrever os metodos equals e hashCode desse seu objeto (qualquer ide faz isso pra ti)..

se não quizer assim, você pode no actionCarregaComboSubcategoria fazer um load na categoria.. assim conseguindo o nome da categoria.. mas acredito que isso não seria uma boa solução.. pq vc estará indo no banco desnecessariamente

2009/3/20 Sérgio Fantin <sergio.l...@gmail.com>

Sérgio Fantin

unread,
Mar 20, 2009, 4:23:51 PM3/20/09
to jav...@googlegroups.com
Eu estou tentando passar o objeto inteiro usando o simpleEntityConverter(http://www.rponte.com.br/2008/07/26/entity-converters-pra-da-e-vender/), mas estou recebendo o erro:

ERROR - An exception occurred

javax.faces.FacesException: javax.faces.FacesException: Exception while calling encodeEnd on component : {Component-Path : [Class: org.ajax4jsf.component.AjaxViewRoot,ViewId: /pages/cadastroFornecedor/cadastraFornecedor.jspx][Class: org.ajax4jsf.component.html.HtmlAjaxRegion,Id: name][Class: javax.faces.component.html.HtmlForm,Id: j_id5][Class: org.richfaces.component.html.HtmlTabPanel,Id: j_id223][Class: org.richfaces.component.html.HtmlTab,Id: j_id231][Class: javax.faces.component.html.HtmlPanelGrid,Id: j_id245]}
    at javax.faces.component.UIComponent.invokeOnComponent(UIComponent.java:166)
    at javax.faces.component.UIComponentBase.invokeOnComponent(UIComponentBase.java:293)
    at javax.faces.component.UIComponent.invokeOnComponent(UIComponent.java:172)
    at javax.faces.component.UIComponentBase.invokeOnComponent(UIComponentBase.java:293)
    at org.ajax4jsf.component.AjaxViewRoot.encodeChildren(AjaxViewRoot.java:543)
    at javax.faces.component.UIComponent.encodeAll(UIComponent.java:250)
    at com.sun.facelets.FaceletViewHandler.renderView(FaceletViewHandler.java:592)
    at org.ajax4jsf.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:100)
    at org.ajax4jsf.application.AjaxViewHandler.renderView(AjaxViewHandler.java:176)
    at org.apache.myfaces.lifecycle.RenderResponseExecutor.execute(RenderResponseExecutor.java:41)
    at org.apache.myfaces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:140)
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:155)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:178)
    at org.ajax4jsf.webapp.BaseFilter.handleRequest(BaseFilter.java:290)
    at org.ajax4jsf.webapp.BaseFilter.processUploadsAndHandleRequest(BaseFilter.java:390)
    at org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:517)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at br.com.sistema.filter.HibernateSessionFilter.doFilter(HibernateSessionFilter.java:21)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
    at java.lang.Thread.run(Thread.java:619)
Caused by: javax.faces.FacesException: Exception while calling encodeEnd on component : {Component-Path : [Class: org.ajax4jsf.component.AjaxViewRoot,ViewId: /pages/cadastroFornecedor/cadastraFornecedor.jspx][Class: org.ajax4jsf.component.html.HtmlAjaxRegion,Id: name][Class: javax.faces.component.html.HtmlForm,Id: j_id5][Class: org.richfaces.component.html.HtmlTabPanel,Id: j_id223][Class: org.richfaces.component.html.HtmlTab,Id: j_id231][Class: javax.faces.component.html.HtmlPanelGrid,Id: j_id245]}
    at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:627)
    at org.ajax4jsf.renderkit.RendererBase.renderChild(RendererBase.java:286)
    at org.ajax4jsf.renderkit.RendererBase.renderChildren(RendererBase.java:262)
    at org.richfaces.renderkit.TabRendererBase.encodeChildren(TabRendererBase.java:113)
    at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:611)
    at org.ajax4jsf.renderkit.RendererBase.renderChild(RendererBase.java:282)
    at org.ajax4jsf.renderkit.RendererBase.renderChildren(RendererBase.java:262)
    at org.richfaces.renderkit.html.TabPanelRenderer.doEncodeChildren(TabPanelRenderer.java:285)
    at org.richfaces.renderkit.html.TabPanelRenderer.doEncodeChildren(TabPanelRenderer.java:280)
    at org.ajax4jsf.renderkit.RendererBase.encodeChildren(RendererBase.java:121)
    at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:611)
    at org.ajax4jsf.renderkit.RendererBase.renderChild(RendererBase.java:282)
    at org.ajax4jsf.renderkit.AjaxChildrenRenderer.encodeAjaxComponent(AjaxChildrenRenderer.java:124)
    at org.ajax4jsf.renderkit.AjaxChildrenRenderer.encodeAjaxChildren(AjaxChildrenRenderer.java:67)
    at org.ajax4jsf.renderkit.AjaxChildrenRenderer.encodeAjaxComponent(AjaxChildrenRenderer.java:115)
    at org.ajax4jsf.renderkit.AjaxChildrenRenderer.encodeAjaxChildren(AjaxChildrenRenderer.java:67)
    at org.ajax4jsf.renderkit.AjaxChildrenRenderer.encodeAjaxComponent(AjaxChildrenRenderer.java:115)
    at org.ajax4jsf.renderkit.AjaxChildrenRenderer.encodeAjaxChildren(AjaxChildrenRenderer.java:67)
    at org.ajax4jsf.renderkit.AjaxChildrenRenderer.encodeAjaxComponent(AjaxChildrenRenderer.java:115)
    at org.ajax4jsf.renderkit.AjaxContainerRenderer.encodeAjax(AjaxContainerRenderer.java:123)
    at org.ajax4jsf.component.UIAjaxRegion.encodeAjax(UIAjaxRegion.java:267)
    at org.ajax4jsf.component.AjaxViewRoot$4.invokeContextCallback(AjaxViewRoot.java:489)
    at javax.faces.component.UIComponent.invokeOnComponent(UIComponent.java:163)
    ... 32 more
Caused by: javax.faces.FacesException: Exception while calling encodeEnd on component : {Component-Path : [Class: org.ajax4jsf.component.AjaxViewRoot,ViewId: /pages/cadastroFornecedor/cadastraFornecedor.jspx][Class: org.ajax4jsf.component.html.HtmlAjaxRegion,Id: name][Class: javax.faces.component.html.HtmlForm,Id: j_id5][Class: org.richfaces.component.html.HtmlTabPanel,Id: j_id223][Class: org.richfaces.component.html.HtmlTab,Id: j_id231][Class: javax.faces.component.html.HtmlPanelGrid,Id: j_id245][Class: javax.faces.component.html.HtmlSelectOneMenu,Id: categoria]}
    at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:627)
    at org.apache.myfaces.shared_impl.renderkit.RendererUtils.renderChild(RendererUtils.java:522)
    at org.apache.myfaces.shared_impl.renderkit.html.HtmlGridRendererBase.renderChildren(HtmlGridRendererBase.java:231)
    at org.apache.myfaces.shared_impl.renderkit.html.HtmlGridRendererBase.encodeEnd(HtmlGridRendererBase.java:102)
    at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:624)
    ... 54 more
Caused by: java.lang.NullPointerException
    at br.com.sistema.conversor.SimpleEntityConverter.addAttribute(SimpleEntityConverter.java:38)
    at br.com.sistema.conversor.SimpleEntityConverter.getAsString(SimpleEntityConverter.java:26)
    at org.apache.myfaces.shared_impl.renderkit.RendererUtils.getConvertedStringValue(RendererUtils.java:630)
    at org.apache.myfaces.shared_impl.renderkit.html.HtmlRendererUtils.getSubmittedOrSelectedValuesAsSet(HtmlRendererUtils.java:362)
    at org.apache.myfaces.shared_impl.renderkit.html.HtmlRendererUtils.internalRenderSelect(HtmlRendererUtils.java:337)
    at org.apache.myfaces.shared_impl.renderkit.html.HtmlRendererUtils.renderMenu(HtmlRendererUtils.java:288)
    at org.apache.myfaces.shared_impl.renderkit.html.HtmlMenuRendererBase.encodeEnd(HtmlMenuRendererBase.java:57)
    at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:624)
    ... 58 more

CÓDIGO:

<h:outputLabel for="categoria" value="Categoria " styleClass="rotulos" />
      <h:selectOneMenu id="categoria" value="#{categoriaFace.categoria}" converter="simpleEntityConverter" rendered="true">

              <f:selectItems value="#{categoriaFace.categorias}" />
</h:selectOneMenu>

Detalhe: minha classe Categoria sobrescreve eq/hC e implementa BaseEntity.

Bruno maomeH

unread,
Mar 20, 2009, 4:50:50 PM3/20/09
to jav...@googlegroups.com
Caused by: java.lang.NullPointerException
    at br.com.sistema.conversor.SimpleEntityConverter.addAttribute(SimpleEntityConverter.java:38)

faça um debug no seu projeto, e verifique quem está null

2009/3/20 Sérgio Fantin <sergio.l...@gmail.com>

Sérgio Fantin

unread,
Mar 23, 2009, 1:26:55 PM3/23/09
to jav...@googlegroups.com
Quando eu uso meu conversor funciona. Devo estar usando esse simpleEntityConverter de forma errada. :(

Mas tudo bem. Valew

Sérgio Fantin

unread,
Mar 24, 2009, 7:53:57 AM3/24/09
to jav...@googlegroups.com

Olá Bruno, 

tô num enrosco danado aqui com esse código. Vou escrever aqui pra ver se você pode me ajudar. Já tentei de tudo, mas o negócio não funciona. :(

Quando eu passava o id pro selectOneMenu o sistema funcionava normal: 

<h:selectOneMenu id="categoria" value="#{categoriaFace.selectedCategoria.id}">, mas acontecia aquele problema de eu só conseguir manipular o id do objeto. 

Tentei fazer do jeito que você sugeriu... o problema é que não consigo amarrar o selectedCategoria do MB com o item escolhido na tela: 

Tentei assim: <h:selectOneMenu id="categoria" value="#{categoriaFace.selectedCategoria}">

Do jeito acima o selectedCategoria do meu MB não é setado a cada clique, é daí que vem o NullPointer... pois a chamada this.selectedCategoria.getId() do método actionCarregaComboSubcategoria retorna null.

Segue o código: 

xhtml

<!-- categorias -->


<h:outputLabel for="categoria" value="Categoria " styleClass="rotulos" />

<h:selectOneMenu id="categoria" value="#{categoriaFace.selectedCategoria}" converter="conversorCategoria" rendered="true">


  <f:selectItems value="#{categoriaFace.categorias}" />

  <a4j:support event="onchange" ajaxSingle="false" action="#{categoriaFace.actionCarregaComboSubcategoria}" reRender="cat,categoria,subcategoria,tableParams" />
</h:selectOneMenu>

MB: 
  private Categoria selectedCategoria = new Categoria();
  // gets/sets

  public List<SelectItem> getCategorias(){
  Session session = HibernateUtil.currentSession();
  CategoriaDAO dao = new CategoriaDAO(session);
   
  List<Categoria> lc = dao.loadAll();
  List<SelectItem> items = new ArrayList<SelectItem>(lc.size());
   
  for(Categoria cat : lc){
  items.add(new SelectItem(cat, cat.getNome()));
  }
   
  // OS DOIS SYSOUTS ESTAO IMPRIMINDO NULL
  System.out.println("> selectedCategoria.getId() >>> " + this.selectedCategoria.getId());
  System.out.println("> selectedCategoria.getNome() >>> " + this.selectedCategoria.getNome());
   
  return items;
  }
   
  /**
  * metodo que carrega o combo(subCategoria) com todas subCategorias relacionadas a categoria o qual foi escolhida no combo "categoria"
  * @return
  */
  public String actionCarregaComboSubcategoria(){
   
  // ESSE EH O CAUSADOR DO NULLPOINTER  
  this.subCategorias = getSubcategoriasByCategoria(this.selectedCategoria.getId());
   
  return "carregaCombosSubCategoriaSucesso";
  }


Abraço...


2009/3/23 Sérgio Fantin <sergio.l...@gmail.com>
Reply all
Reply to author
Forward
0 new messages