Urgente - Edição no SelectOneMenu - setando valor do banco

3 respostas
I

Olá Pessoal!

Estou desenvolvendo com o jsf 1.1 (não tenho como mudar).

Tenho um componente "SelectOneMenu" que esta sendo carregado conforme abaixo:

<brHtml:brSelectOneMenu id="destinatarioSelected" value="#{publicacaoBean.nomeLista}" style="width: 320px">		
					<f:selectItem itemLabel="#{msgs.importar_arquivo}" itemValue="0"/>	
					<f:selectItems value="#{publicacaoBean.selecaoDestinatarios}" />							
				</brHtml:brSelectOneMenu>

--BEAN

private String nomeLista;
getters setters

public List<SelectItem> getSelecaoDestinatarios() throws SQLException, JDOMException, IOException {  
		 
		List<SelectItem> lst = new ArrayList<SelectItem>();
		
		//lendo xml da maquina local
	  	File f = new File("c:/ambiente_teste/layoutListasPublicacoes.xml");  		   
	    SAXBuilder sb = new SAXBuilder();  		  
	    Document d = sb.build(f);  		
	    Element mural = d.getRootElement();  		 
	    List elements = mural.getChildren();  
	    Iterator i = elements.iterator();  
	    
	    while (i.hasNext()) {  
	       Element element = (Element) i.next();
	       SelectItem item = new SelectItem(element.getAttributeValue("CodPublicacao")+"-"+element.getAttributeValue("NomePublicacao") , element.getAttributeValue("NomePublicacao"));
		   lst.add(item);
	    }  
		    
	    return lst;  
	}

Na hora de salvar esta ok, minha dificuldade esta na hora de alterar, Na edição eu seleciono num datatable o registro e outra pagina é aberta com os dados para edição, os textbox estão sendo preenchidos ok. Não estou conseguindo fazer com que o SelectOneMenu venha setado com o valor que veio do banco. Alguem pode me ajudar??

Método que popula a pagina para edição:
public void publicacaoSelecionadaParaEdicao(ActionEvent e) throws SQLException, IOException{
				
		if (getListaPublicacao().size() > 0) {			
			for(int i = 0; i < getListaPublicacao().size(); i++){				
				if (this.publicacao.getChecked().get(getListaPublicacao().get(i).getId())) {				
					this.qtdEditar = qtdEditar + 1;	
					publicacao.setId(getListaPublicacao().get(i).getId());
					publicacao.setNome(getListaPublicacao().get(i).getNome());
					publicacao.setNumeroLista(getListaPublicacao().get(i).getNumeroLista());
					publicacao.setNomeLista(getListaPublicacao().get(i).getNomeLista());					
					publicacao.setObjetivo(getListaPublicacao().get(i).getObjetivo());
					publicacao.setFrequencia(getListaPublicacao().get(i).getFrequencia());
					publicacao.setGestor(getListaPublicacao().get(i).getGestor());
					publicacao.setPathArquivo(getListaPublicacao().get(i).getPathArquivo());
					publicacao.setPathPub(getListaPublicacao().get(i).getPathPub());
					publicacao.setPathZip(getListaPublicacao().get(i).getPathZip());					
					  
				}
			}	
			
			if (this.qtdEditar == 0) {
				EmpresaFacesUtils.addInfoModalMessage("Selecione uma Publicação.", null, EmpresaViewExceptionActionType.PATH, false);
				return; 
			} else if (this.qtdEditar > 1) {
				EmpresaFacesUtils.addInfoModalMessage("Selecione apenas uma Publicação.", null, EmpresaViewExceptionActionType.PATH, false);
				return;
			}
	   }  
	}

Desde já agradeço a ajuda!

3 Respostas

M

A string nomeLista que é formada no value do seu selectOneMenu é essa:

element.getAttributeValue("CodPublicacao")+"-"+element.getAttributeValue("NomePublicacao")

então se você quer que ele reconheça como a mesma coisa, ao editar, você terá que popular essa String “nomeLista” idêntica a esse value. Pra falar a verdade eu nao tenho certeza se ele reconheceria então acho que seria melhor você repensar como popular a lista do selectOneMenu, digo se o value será string, integer… na minha opinião a solução seria você usar o value como um Long e criar um converter para Publicação no selectOneMenu.

SelectItem item = new SelectItem(element.getAttributeValue("CodPublicacao")+"-"+element.getAttributeValue("NomePublicacao") , element.getAttributeValue("NomePublicacao"));

Na internet deve ter exemplos.

I

Valeu mr.michels!

Ainda não consegui. Eu usei assim:

pq tem que aparecer para o usuario dessa forma no combo.

M

Cara um converter poderia fazer isso pra você nele você configura para receber um long ou object e retornar essa string sua ae.

ve esse blog

Criado 16 de agosto de 2013
Ultima resposta 16 de ago. de 2013
Respostas 3
Participantes 2