2010-09-28 41 views
1

(PS:我的英语很抱歉)事件并不RichFaces的叫

我在应用该文本框有一个文本字段我有一个A4J:支持,应该在onchange事件工作!所以我对Include和Update有相同的表单。 用户用代码填充文本字段,并在我的bean中我有一个方法,搜索等价的组合框,如果该值存在,然后将其设置为我的bean的对象,这适用于包括但不适用于更新!我不知道这可能是什么。我将发布代码。

我的XHTML页面

<ui:decorate template="../templates/edit.xhtml"> 
        <ui:param name="idComponente" value="codTipoVinculo" /> 
        <ui:define name="label">Tipo Vínculo: </ui:define> 
        <h:inputText id="codTipoVinculo" 
         value="#{cadastroPrestadorBean.codTipoVinculo}" 
         size="4" maxlength="1" 
         styleClass="#{validationUtil.invalid('codTipoVinculo', facesContext) ? 'invalido' : ''}" 
         onkeypress="return(soEntraNumero(event,this));" 
         onmouseout="soArrastaNumero(this);" 
         onblur="soArrastaNumero(this);"> 
         <a4j:support event="onchange" 
            action="#{cadastroPrestadorBean.findByKey(cadastroPrestadorBean.prestador.tipoVinculo)}" 
            ajaxSingle="true" 
            immediate="true" 
            focus="codTipoPgtoMatmed" 
            reRender="nomeTipoVinculo, codTipoVinculo, outputMessagesInForm"> 
          <a4j:actionparam noEscape="true" 
           value="(document.getElementById('formPrestador:codTipoVinculo').value == '' ? '-11111' : document.getElementById('formPrestador:codTipoVinculo').value)" 
           assignTo="#{cadastroPrestadorBean.codTipoVinculo}" />               
         </a4j:support> 
        </h:inputText> 
        <rich:comboBox enableManualInput="false" defaultLabel="Selecione uma opção" id="nomeTipoVinculo" 
         value="#{cadastroPrestadorBean.prestador.tipoVinculo}" 
         converter="simpleIndexConverterTipoVinculo"> 
         <f:selectItems 
          value="#{cadastroPrestadorBean.listaTipoVinculo }" /> 
         <a4j:support event="onchange" reRender="codTipoVinculo, outputMessagesInForm" 
          ajaxSingle="true" limitToList="true" 
          action="#{cadastroPrestadorBean.findByKey(cadastroPrestadorBean.prestador.tipoVinculo)}" /> 
        </rich:comboBox> 
       </ui:decorate> 

我的bean方法

if (object instanceof TipoVinculo) { 
      if (codTipoVinculo == null || codTipoVinculo == -11111) { 
       prestador.setTipoVinculo(new TipoVinculo()); 
       return; 
      } 
      for (SelectItem element : listItemsTipoVinculo) { 
       if ((((TipoVinculo)element.getValue()).getCodTipoVinculo().intValue()) == codTipoVinculo){ 
        prestador.setTipoVinculo((TipoVinculo)BeanUtils.cloneBean(element.getValue())); 
        achou = true; 
       } 
      } 
      if (!achou){ 
       prestador.setTipoVinculo(new TipoVinculo()); 
       addMessageInfo("Tipo Vínculo inválido."); 
      } 
      achou = false; 
     } 

这是填充listItemsTipoVinculo

public List<SelectItem> getListaTipoVinculo() { 
    try { 
     if (listItemsTipoVinculo.size() == 0){ 
      List<TipoVinculo> list = tipoVinculoBusiness.listaTiposVinculos(); 
      for (TipoVinculo item : list) { 
       listItemsTipoVinculo.add(new SelectItem(item)); 
      } 
     } 
    } catch (CommonBusinessException e) { 
     addMessageError(e); 
    } 
    return listItemsTipoVinculo; 
} 

组合框先前居住在listItemsTipoVinculo的方法,以便当页面开始我有它填充。当用户将代码放入文本框时,它应该调用findbykey方法,但它们不会!只是在我的更新屏幕上,当我的对象'prestador'被填充。

回答

1

嗯,我发现发生了什么事...... 的问题是在我的形式纳入我设置我的所有对象,以新实例和更新只是那些谁在数据库中的值...

所以我只需检查bean是否为空,然后创建一个新实例!

if (prestador.getTipoVinculo()==null){ 
    prestador.setTipoVinculo(new TipoVinculo()); 
} 

解决我的问题...... 任何方式,感谢所有谁读这个!