[Resolvido!] Como dar um load recuperando também o valor dos objetos selectOneMenu?

6 respostas
Kleber-rr

Olá pessoa, bom dia a todos.

Estou tentando recuperar o valor de um objeto selectOneMenu durante um load usando persistência.

Na minha classe DAO, o padrão do load é assim:
@SuppressWarnings("unchecked")
	public T load(Long id) {
		logger.info("lendo " + persistentClass + " com id " + id);
		return (T) session.load(persistentClass, id);
	}
No meu método está assim:
public void escolheUnidade(ActionEvent event) {
		UIComponent link = event.getComponent();
		UIParameter param = (UIParameter) link.findComponent("editCod");
		Long id = (Long) param.getValue();
		Session session = HibernateUtil.currentSession();
		Dao<Unidade> ueDao = new Dao<Unidade>(session, Unidade.class);
		this.unidade = ueDao.load(id);
	}
A questão é que, dentro da minha jsp, tenho uns combos que devem retornar o valor correspondente ao que foi gravado junto com a unidade, porém, quando é feito o load, os objetos selectOneMenu vem sem o item correspondente.

Ou seja, aparece assim:
[img]http://www.guj.com.br/upload/2010/11/29/0e74dffa7304a70b90f82f8cb1e3b3f2_62600.png__thumb[/img]

Mas deveria aparecer assim:
[img]http://www.guj.com.br/upload/2010/11/29/c07021a5f69d9acaf4a07e7c6de0093c_62600.png__thumb[/img]

O método de um dos combos é este:
private HtmlSelectOneMenu orgaogestorSelecionado;
//getters e setters...
	private OrgaoGestorHandler pegaOrgaoGestorHandler() {
		FacesContext facesContext = FacesContext.getCurrentInstance();
		ELContext elContext = facesContext.getELContext();
		ELResolver resolver = facesContext.getApplication().getELResolver();
		Object og = resolver.getValue(elContext, null, "orgaogestorHandler");

		return (OrgaoGestorHandler) og;
	}

	public List<SelectItem> getOrgaoGestorParaComboBox() {
		List<SelectItem> lista = new ArrayList<SelectItem>();

		// usaremos o id como valor e o nome como label para os SelectItem.
		OrgaoGestorHandler handler = pegaOrgaoGestorHandler();
		for (OrgaoGestor og : handler.getOrgaosGestores()) {
			lista.add(new SelectItem(og.getCod_orgaogestor(), og.getNome()));
		}
		return lista;
	}

A quem puder contribuir, agradeço.

Ótima semana a todos.



6 Respostas

Kleber-rr

up!!

Kleber-rr

eae?

Kleber-rr
Bom, tentando utilizar do setSubmittedValue do UIViewRoot, que eu utilizo para limpar os combos quando necessário, tentei fazer com que este método me retornasse no combo o valor salvo com o registro original, da seguinte forma:
public void escolheUnidade(ActionEvent event) {
		UIComponent link = event.getComponent();
		UIParameter param = (UIParameter) link.findComponent("editCod");
		Long id = (Long) param.getValue();

		Session session = HibernateUtil.currentSession();
		Dao<Unidade> ueDao = new Dao<Unidade>(session, Unidade.class);
		this.unidade = ueDao.load(id);

		FacesContext facesContext = FacesContext.getCurrentInstance();
		UIViewRoot uiViewRoot = facesContext.getViewRoot();

		HtmlSelectOneMenu selectOneMenu = null;
		String ogSelecionado = this.unidade.getOrgaogestor().getNome()
				.toString();

		selectOneMenu = (HtmlSelectOneMenu) uiViewRoot
				.findComponent("upd-unidade:selOG");
		selectOneMenu.setSubmittedValue(String.valueOf(ogSelecionado)
				.toString());
	}

Apesar dele perfeitamente imprimir o valor "String.valueOf(ogSelecionado).toString()" no console, usando o SystemOUTPrint, ele não exibe no combo este valor...

Eae, alguem tem alguma idéia?? Isso é possível ser feito?

Agradeço.

Kleber-rr

Eae pessoal, nada sobre isso?

Kleber-rr

Eae pessoal, nenhuma dica??
Kd o pessoal desse fórum??

Vlw.

Kleber-rr

Bom, graças ao "incentivo" dos colegas em não responder e estimular o curto-circuito dos meus neorônios (rsrssr), consegui resolver de uma certa forma, mas não sei se pode ser considerada uma forma correta ou uma gambiarra, então lá vai:

No meu método escolheOrgaoGestor, eu carrego os parâmetros de todos os objetos selectOneMenu utilizados:
public void escolheOrgaoGestor(ActionEvent event) {
		Session session = HibernateUtil.currentSession();
		UIComponent link = event.getComponent();
		UIParameter param = (UIParameter) link.findComponent("editCod");
		UIParameter paramCI = (UIParameter) link.findComponent("editCodc");
		UIParameter paramNG = (UIParameter) link.findComponent("editCodn");
		UIParameter paramIN = (UIParameter) link.findComponent("editCodi");

		Dao<OrgaoGestor> dao = new Dao<OrgaoGestor>(session, OrgaoGestor.class);
		Dao<MunicipiosRR> mdao = new Dao<MunicipiosRR>(session,
				MunicipiosRR.class);
		Dao<NivelGestao> udao = new Dao<NivelGestao>(session, NivelGestao.class);
		Dao<Internet> idao = new Dao<Internet>(session, Internet.class);

		Long id = (Long) param.getValue();
		Long idcidade;
		Long idng;
		Long idin;

		String nome_cidade = String.valueOf(paramCI.getValue().toString());
		String nome_ng = String.valueOf(paramNG.getValue().toString());
		String nome_in = String.valueOf(paramIN.getValue().toString());

		List<MunicipiosRR> listam = mdao.list();
		List<NivelGestao> listau = udao.list();
		List<Internet> listai = idao.list();

		for (MunicipiosRR m : listam) {
			if (nome_cidade.equals(m.getMunicipios())) {
				idcidade = m.getCod_municipiosrr();
				this.municipios = mdao.load(idcidade);
				System.out.println("load municipio com id: " + idcidade);
			}
		}

		for (NivelGestao u : listau) {
			if (nome_ng.equals(u.getTipo())) {
				idng = u.getCod_nivelgestao();
				this.nivel = udao.load(idng);
				System.out.println("load nivel com id: " + idng);
			}
		}

		for (Internet i : listai) {
			if (nome_in.equals(i.getTipo())) {
				idin = i.getCod_internet();
				this.internet = idao.load(idin);
				System.out.println("load internet com id: " + idin);
			}
		}

		this.orgaogestor = dao.load(id);
		System.out.println("load orgaogestor com id: " + id);
	}
E na jsp, eu seto os parametros para serem capturados ao clicar no commandButton:
<h:commandButton value="Alterar" actionListener="#{orgaogestorHandler.escolheOrgaoGestor}" reRender="selecM,selecNG,selecInt">

				<f:param id="editCod" name="cod" value="#{f.cod_orgaogestor}"/>
				<f:param id="editCodc" name="codc" value="#{f.municipiosrr_cod_municipiosrr}"/>
				<f:param id="editCodn" name="codn" value="#{f.nivelgestao_cod_nivelgestao}"/>
				<f:param id="editCodi" name="codi" value="#{f.internet_cod_internet}"/>
			</h:commandButton>

Bom, pelo menos funcionou.
Se houver alguma correção, por favor, sintam-se à vontade em ajudar.

Vlw.

Criado 29 de novembro de 2010
Ultima resposta 1 de mar. de 2011
Respostas 6
Participantes 1