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

Olá Pessoal!

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

Tenho um componente “SelectOneMenu” que esta sendo carregado conforme abaixo:

[code]<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>[/code]

–BEAN

private String nomeLista;
getters setters

[code]public List 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;  
}  [/code]

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:

[code]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;
		}
   }  
}[/code]	

Desde já agradeço a ajuda!

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.

Valeu mr.michels!

Ainda não consegui. Eu usei assim:

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

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