Olá pessoal, estou com uma dúvida, já vi outros exemplos dizendo q para pegar texto da SelectItem é só colocar:
<h:selectOneMenu id="combo" value="#{contatoMB.valor}">.
Assim o nome q for selecionado irá para a variavel String valor (ja criada na classe model), mas quando tento salvar no banco de dados é salvo como “null”, ou seja, não está pegando o nome selecionado, e ja conferi se passei a variavel e esta tudo certo. Dúvida como faço para pegar o nome selecionado em uma SelectItem e passar para uma variavel tipo String, e uma <h:outputText>?
O seu managed bean está mapeado como contatoMB?
Se estiver, faça um debug na sua aplicação e confira qual é o valor do atributo valor momentos antes de fazer o commit no banco de dados e diga qual foi o resultado.
Se não estiver, tenha certeza de adicionar ao arquivo de configuração do framework o mapeamento desse bean.
D
ddark.emanu
É através do value mesmo que você pega o valor.
caso queira enviar para um h:outputText segue o código :
O seu managed bean está mapeado como contatoMB?
Se estiver, faça um debug na sua aplicação e confira qual é o valor do atributo valor momentos antes de fazer o commit no banco de dados e diga qual foi o resultado.
Se não estiver, tenha certeza de adicionar ao arquivo de configuração do framework o mapeamento desse bean.
Então cara o ManagedBean ta configurado certo porq os outros parametros estao inserindo corretamente, o faces-config.xml esta mapeado corretamente, verifiquei tudo antes já, mas esta passando “null” !
R
rapha.java
ddark.emanu:
É através do value mesmo que você pega o valor.
caso queira enviar para um h:outputText segue o código :
Já tentei dessa forma mas não mostra o valor, só mostra quando o atributo é inserido manualmente!
Ainda não estou usando Ajax!
Mas obrigado pela ajuda !
D
ddark.emanu
se você estiver querendo pegar do banco você vai precisar de um converter no h:selectOneMenu e os selectItens vai receber valor do Controller.
então ainda não sei mecher com converter como seria essa conversão? Li o tutorial mas fiquei com muitas duvidas em relação à como fazer isto!
Obrigado pela ajuda !
D
ddark.emanu
Você vai criar uma classe no seu projeto web que implementa Converter ,se estiver utilizando JSF 2.0 você vai usar essa anotação @FacesConverter(“nomeConverter”), seguindo o artigo eu usei o SimpleIndexConverter convertando minha lista de objetos que é recebida no meu selectOneMenu
meu codigo :
View
<h:selectOneMenuid="grupo"value="#{solicitacaoController.solicitacao.grupo}"converter="simpleEntityConverter"style="width: 265px"required="true"requiredMessage="Campo Grupo é Obrigatório."><f:selectItemitemValue=""itemLabel="Selecione um Grupo"/><f:selectItemsvalue="#{solicitacaoController.grupos}"/></h:selectOneMenu>
converter
packageutil;importjava.util.ArrayList;importjava.util.Collection;importjava.util.Iterator;importjava.util.List;importjava.util.Map;importjavax.faces.component.UIComponent;importjavax.faces.component.UISelectItem;importjavax.faces.component.UISelectItems;importjavax.faces.context.FacesContext;importjavax.faces.convert.Converter;importjavax.faces.convert.FacesConverter;importjavax.faces.model.SelectItem;importjavax.faces.model.SelectItemGroup;@FacesConverter("simpleEntityConverter")publicclassSimpleEntityConverterimplementsConverter{privateintindex=-1;/* (non-Javadoc) * @see javax.faces.convert.Converter#getAsObject(javax.faces.context.FacesContext, javax.faces.component.UIComponent, java.lang.String) */publicObjectgetAsObject(FacesContextctx,UIComponentcomponent,Stringvalue){// fiz uma alteração nesse método, para poder gravar nulltry{SelectItemselectedItem=this.getSelectedItemByIndex(component,Integer.parseInt(value));if(selectedItem!=null)returnselectedItem.getValue();}catch(Exceptione){returnnull;}returnnull;}/* (non-Javadoc) * @see javax.faces.convert.Converter#getAsString(javax.faces.context.FacesContext, javax.faces.component.UIComponent, java.lang.Object) */publicStringgetAsString(FacesContextctx,UIComponentcomponent,Objectvalue){index++;returnString.valueOf(index);}/** * Obtem o SelecItem de acordo com a opção selecionada pelo usuário */protectedSelectItemgetSelectedItemByIndex(UIComponentcomponent,intindex){List<SelectItem>items=this.getSelectItems(component);intsize=items.size();if(index>-1&&size>index){returnitems.get(index);}returnnull;}protectedList<SelectItem>getSelectItems(UIComponentcomponent){List<SelectItem>items=newArrayList<SelectItem>();intchildCount=component.getChildCount();if(childCount==0)returnitems;List<UIComponent>children=component.getChildren();for(UIComponentchild:children){if(childinstanceofUISelectItem){this.addSelectItem((UISelectItem)child,items);}elseif(childinstanceofUISelectItems){this.addSelectItems((UISelectItems)child,items);}}returnitems;}protectedvoidaddSelectItem(UISelectItemuiItem,List<SelectItem>items){booleanisRendered=uiItem.isRendered();if(!isRendered){items.add(null);return;}Objectvalue=uiItem.getValue();SelectItemitem;if(valueinstanceofSelectItem){item=(SelectItem)value;}else{ObjectitemValue=uiItem.getItemValue();StringitemLabel=uiItem.getItemLabel();// JSF throws a null pointer exception for null values and labels, // which is a serious problem at design-time. item=newSelectItem(itemValue==null?"":itemValue,itemLabel==null?"":itemLabel,uiItem.getItemDescription(),uiItem.isItemDisabled());}items.add(item);}@SuppressWarnings("unchecked")protectedvoidaddSelectItems(UISelectItemsuiItems,List<SelectItem>items){booleanisRendered=uiItems.isRendered();if(!isRendered){items.add(null);return;}Objectvalue=uiItems.getValue();if(valueinstanceofSelectItem){items.add((SelectItem)value);}elseif(valueinstanceofObject[]){Object[]array=(Object[])value;for(inti=0;i<array.length;i++){// TODO test - this section is untested if(array[i]instanceofSelectItemGroup){resolveAndAddItems((SelectItemGroup)array[i],items);}else{items.add((SelectItem)array[i]);}}}elseif(valueinstanceofCollection){Iterator<SelectItem>iter=((Collection<SelectItem>)value).iterator();SelectItemitem;while(iter.hasNext()){item=iter.next();if(iteminstanceofSelectItemGroup){resolveAndAddItems((SelectItemGroup)item,items);}else{items.add(item);}}}elseif(valueinstanceofMap){for(Map.Entry<Object,Object>entry:((Map<Object,Object>)value).entrySet()){Objectlabel=entry.getKey();SelectItemitem=newSelectItem(entry.getValue(),label==null?(String)null:label.toString());// TODO test - this section is untested if(iteminstanceofSelectItemGroup){resolveAndAddItems((SelectItemGroup)item,items);}else{items.add(item);}}}}protectedvoidresolveAndAddItems(SelectItemGroupgroup,List<SelectItem>items){for(SelectItemitem:group.getSelectItems()){if(iteminstanceofSelectItemGroup){resolveAndAddItems((SelectItemGroup)item,items);}else{items.add(item);}}}}
D
ddark.emanu
É interessante entender o ciclo de vida do JSF, da uma olhada nesse outro artigo