a4j:support nao Limpa campo

8 respostas
R

Olá Pessoal,

Eu tenho o seguinte treco de codigo:

<h:outputText  value="Concorrente:" />
<h:selectOneMenu id="concorrente" value="#{anuncioConcorrenteMB.anuncioConcorrente.concorrente.codConcorrente}" required="true" styleClass="tamanho300" >
    <f:selectItems value="#{menuMB.listaConcorrente}" />
    <a4j:support event="onchange"
	 action="#{anuncioConcorrenteMB.carregaCampoConcorrente}"
	reRender="datEdicaoCapa,qtdPaginaEdicao"
                ajaxSingle="true"
                onsubmit="javascript:Richfaces.showModalPanel('loadingModalBox');"
	oncomplete="javascript:Richfaces.hideModalPanel('loadingModalBox');"/>  
    </h:selectOneMenu>

<h:outputText  value="Dt.Capa:" />
<h:inputText label="Dt.Capa" id="datEdicaoCapa" size="10" readonly="true" value="#{anuncioConcorrenteMB.anuncioConcorrente.datEdicao}">
   <f:convertDateTime pattern="dd/MM/yyyy" timeZone="#{menuMB.timeZone}"/>
</h:inputText>

<h:outputText  value="Qtde Paginas:" />
<h:inputText label="Qtde Paginas" id="qtdPaginaEdicao" size="10" readonly="true" value="#{anuncioConcorrenteMB.anuncioConcorrente.qtdPaginaEdicao}" />

Ao selecionar um concorrente ele preenche os campos Dt.Capa e Qtde Pagina porem no 1. item do select é um “Selecione” com value="", ao selecionar esse cara nao é chamado o action do a4j:support e assim eu não consigo limpar os itens ficando sempre sujos quando o cara escolhe o “Selecione”…

Alguem sabe pq ?

Estou utilizando JSF 1.2 e Ricfaces 3.3.1

Obrigado,
Rodrigo

8 Respostas

R

Alguem ?

P

No método (action) do managed bean, voce deve estar setando os valores para as variáveis que vao preencher os campos, procede?

Se estiver fazendo isso, caso a seleção seja o “Selecione” do select, na action voce deve fazer as strings dos campos onde que limpar = “”; (string vazia)

Experimente.

Diga se deu certo.

R

pirado18:
No método (action) do managed bean, voce deve estar setando os valores para as variáveis que vao preencher os campos, procede?

Se estiver fazendo isso, caso a seleção seja o “Selecione” do select, na action voce deve fazer as strings dos campos onde que limpar = “”; (string vazia)

Experimente.

Diga se deu certo.

Então no f:selectItems o 1. item é um “–Selecione–” com valor = “”, quando eu seleciono um valor a action do a4j:support é chamada e eu limpo os campos que vao ser preenchidos e faço um nova pesquisa e insiro os novos valores, funcionada blzinha, o problema é quando eu seleciono o 1. item “–Selecione–” a action do a4j:support não funciona. Será que é pq o value do 1. item é vazio “” ???

Obrigado,
Rodrigo

P

Tenta o seguinte, coloca no reRender, pra rerenderizar o select também, pra dar submit nele.

Dentro do método, vc faz um if, se já nao estiver fazendo:

if(valueDoSelect==valorEquivalenteASELECIONE)
stringAExibirNaPagina = ""; //vc limpa o conteudo da string
//Ou então faz new Objeto() que é exibido na página.

Quando utilizo selectOneMenu eu passo pra ele uma lista do tipo SelectItem do JSF.

cada objeto SelectItem tem um valor string e um valor object, eu passo na string o texto que será exibido no box e o object eu passo o ID (LONG) do objeto que estou exibindo na página, mas antes de tudo, eu crio um objeto inicial, SelectItem selecione = new SelectItem(“Selecione”, new Long(-1));

Na action que trata a seleção, eu sempre verifico se o value for != -1 ele limpa os campos, caso contrario tenta carregar o objeto pelo ID.

P

ah, eu adiciono o primeiro objeto na lista, depois o restante.

Outra coisa, posta o método pra ver o que faz nele, senao fica dificil adivinhar, imaginar como ele está. As vezes o que eu to falando nao tem nada a ver.

R

pirado18:
Tenta o seguinte, coloca no reRender, pra rerenderizar o select também, pra dar submit nele.

Dentro do método, vc faz um if, se já nao estiver fazendo:

if(valueDoSelect==valorEquivalenteASELECIONE)
stringAExibirNaPagina = ""; //vc limpa o conteudo da string
//Ou então faz new Objeto() que é exibido na página.

Quando utilizo selectOneMenu eu passo pra ele uma lista do tipo SelectItem do JSF.

cada objeto SelectItem tem um valor string e um valor object, eu passo na string o texto que será exibido no box e o object eu passo o ID (LONG) do objeto que estou exibindo na página, mas antes de tudo, eu crio um objeto inicial, SelectItem selecione = new SelectItem(“Selecione”, new Long(-1));

Na action que trata a seleção, eu sempre verifico se o value for != -1 ele limpa os campos, caso contrario tenta carregar o objeto pelo ID.

Eu estou fazendo isso tambem…So que ao invez de ser um Long(-1) é “”…

Assim na lista:

List<SelectItem> lista = new ArrayList<SelectItem>();
lista.add(new SelectItem("", JSFUtil.obterMensagem("selecione")));
for(Posicoes p :  posicaoDao.loadAll()){
  lista.add(new SelectItem(p.getCodPosicao(), p.getDesPosicao(), p.getDesPosicao()));
}

Esse é o metodo que o a4j:support chama :

public void carregaCampoConcorrente(){
		setListaEdicaoConcorrente(null);
		getAnuncioConcorrente().getEdicao().setCodEdicao(null);
		setListaPrecoConcorrente(null);
		getAnuncioConcorrente().getPreco().setCodPreco(null);
		setListaEspaco(null);
		getAnuncioConcorrente().getEspaco().setCodEspaco(null);
		getAnuncioConcorrente().setDatEdicao(null);
		getAnuncioConcorrente().setQtdPaginaEdicao(null);
		
		List<SelectItem> lista = new ArrayList<SelectItem>();
		lista.add(new SelectItem("", JSFUtil.obterMensagem("selecione")));
		for(EdicoesConcorrentes e : edicaoConcorrenteDao.findByConcorrente(getAnuncioConcorrente().getConcorrente().getCodConcorrente())){
			lista.add(new SelectItem(e.getCodEdicao(), e.getNumEdicao().toString(), e.getNumEdicao().toString()));
		}
		setListaEdicaoConcorrente(lista);
}

Este metodo acima nao é nem chamado quando eu escolho o item “Selecione”, Isso que é mais estranho…Sera que é pq eu estou como o value = “” do “Selecione” ??

[]´s

P

Cara, seguinte, voce cria o selectItem passando o codigo do concorrente, o valor q muda entre os itens eh exatamente esse de codConcorrente, pelo que entendi.

Logo, qnd vc ta setando esse codigo concorrente como uma string “” pode ser que ele nao esteja encontrando, mas estranho, seria o mesmo que usar long e colocar = -1. Experimenta fazer com numeros, vai gerando pra cada item um numero ‘i’, sendo q o primeiro é -1, faz UM TESTE, pra ver se resolver, tipo, pra ver se muda, voce adapta ai, só pra efeito de teste memso, é dificil dar opiniao sem ver o codigo completo. Experimenta isso, pode ser que com String nao seja legal esse SelectItem.

observe os reRender’s também, faz como te falei, a cada vez que voce mudar o item selecionado, dá um submit nele com um a4j:region, ele reRenderiza somente esse componente. pra ver se atualiza os valores.

R

pirado18:
Cara, seguinte, voce cria o selectItem passando o codigo do concorrente, o valor q muda entre os itens eh exatamente esse de codConcorrente, pelo que entendi.

Logo, qnd vc ta setando esse codigo concorrente como uma string “” pode ser que ele nao esteja encontrando, mas estranho, seria o mesmo que usar long e colocar = -1. Experimenta fazer com numeros, vai gerando pra cada item um numero ‘i’, sendo q o primeiro é -1, faz UM TESTE, pra ver se resolver, tipo, pra ver se muda, voce adapta ai, só pra efeito de teste memso, é dificil dar opiniao sem ver o codigo completo. Experimenta isso, pode ser que com String nao seja legal esse SelectItem.

observe os reRender’s também, faz como te falei, a cada vez que voce mudar o item selecionado, dá um submit nele com um a4j:region, ele reRenderiza somente esse componente. pra ver se atualiza os valores.

Blz…Vou testar e depois te falo…

Obrigado,
Rodrigo

Criado 18 de novembro de 2009
Ultima resposta 27 de nov. de 2009
Respostas 8
Participantes 2