javasf@googlegroups.com
[Top] [All Lists]

[javasf] Re: passagem de parâmetro com selectOneMenu

Subject: [javasf] Re: passagem de parâmetro com selectOneMenu
From: rogerioag
Date: Mon, 11 Apr 2011 12:21:54 -0700 PDT
Como estou usando o Spring 2.5, defini algumas variáveis no
application-context.xml, entre elas uma referência a uma instância de
LocalidadeFacade, e no faces-config.xml, onde declarei meu managedBean
eu inseri uma property referenciando-a. Com isso, no LocalidadeMB eu
tenho um setLocalidadeFacade e com isso eu consigo acessar o facade
(que acessa o DAO) em qualquer lugar do código. Como nesta classe é
que alimento os SelectItem, ao selecionar um item é nela que está uma
referência para a variável municipío (também gerenciada pelo Spring).

O problema foi que repeti toda a configuração definindo o validador
como um managedBean, criando nele também uma referência ao
LocalidadeFacade e ao municío, com seus respectivos métodos setXXX mas
aochamar a classe estas referências permaneciam nulas, não consiguia
recuperar a instância de município. Foi por isso que passei a tentar
passar como parâmetro direto da página JSF, mas também não deu certo,
por isso vim aqui pedir ajuda.

On 11 abr, 14:38, Walter Mourão <walter.mou...@xxxxxxxxx> wrote:
> > Configurei esta classe validador no faces-config.xml como
> > se fosse um managedBean, mas nunca conseguia pegar a referência ao
> > município (sempre ficava null). Se me der alguma sugestão de como
> > conseguir isso......
>
> A instância que é usada para a validação não é a mesma que vc declarou no
> faces-config... Acesse seu DAO de outra forma.
>
> Walter 
> Mourãohttp://waltermourao.com.brhttp://arcadian.com.brhttp://oriens.com.br
>
> 2011/4/11 rogerioag <roggai...@xxxxxxxxx>
>
> > Flavio,
>
> > o problema de usar o value do selectOneMenu é que trata-se de uma
> > coleção de SelectItem com value=id e labels=descrição, não tem relação
> > direta com município. Usar o value aqui seria gambiarra (como disse o
> > colega Walter). Pra usá-la também, complicaria outra coisas para mim,
> > e acho que teria uma solução mais correta.
>
> > Quanto ao seu comentário, Walter, a primeira solução que pensei foi
> > esta, de acessar o banco através do validador, mas também tive
> > problemas. Quando seleciono o município (existe um
> > 'selecionarMunicipio' em um outro selectOneMenu antes deste, com a
> > coleção de municípios) que é tratado no localidadeMB, onde eu seto a
> > variável, só que depois eu não consigo recuperá-la na classe do
> > validador. Configurei esta classe validador no faces-config.xml como
> > se fosse um managedBean, mas nunca conseguia pegar a referência ao
> > município (sempre ficava null). Se me der alguma sugestão de como
> > conseguir isso......
>
> > On 11 abr, 12:06, Walter Mourão <walter.mou...@xxxxxxxxx> wrote:
> > > > E alimentar id+informação direto no selectItem achei meio estranho.
>
> > > é estranho sim... isso é gambiarra de último caso. Busque a instância do
> > > banco de dentro do validator que é mais negócio.
>
> > > Walter Mourãohttp://waltermourao.com.brhttp://arcadian.com.brhttp://
> > oriens.com.br
>
> > > 2011/4/11 rogerioag <roggai...@xxxxxxxxx>
>
> > > > O problema é exatamente este, nem semelhante a isso consegui fazer.
> > > > Tentei gravar como String em um inputHidden mas não consegui.
>
> > > > Tentei usar
>
> > > > <t:jsValueChangeListener for="codLocalidadeRelacionada"
> > > >        expressionValue="$destElem.value =
> > > > $srcElem.options[$srcElem.selectedIndex].text"/>
>
> > > > mas grava o nome da localidade exibida no selectItem, não tem como via
> > > > javascript captar o valor da propriedade que quero.
>
> > > > Tentei usar f:param , f:attribute , tudo sem sucesso.
>
> > > > E alimentar id+informação direto no selectItem achei meio estranho.
>
> > > > On 11 abr, 09:19, Walter Mourão <walter.mou...@xxxxxxxxx> wrote:
> > > > > Sugestão simplista: ao invés de retornar o id, retorne um string que
> > > > tenha o
> > > > > id+informação adicional, tipo assim: "99#info" e destrinche no
> > validator
> > > > ou
> > > > > outro lugar.
>
> > > > > Walter Mourãohttp://waltermourao.com.brhttp://arcadian.com.brhttp://
> > > > oriens.com.br
>
> > > > > 2011/4/11 rogerioag <roggai...@xxxxxxxxx>
>
> > > > > > Não usei o value em selectOneMenu, e sim no selectItens (ver
> > abaixo).
> > > > > > Tanto que nessa tela tenho outros 3 selects sem problema.
>
> > > > > > O diferente deste select é que quero passar além do ID do item
> > > > > > corrente que for selecionado (uma instância de um objeto do tipo
> > > > > > Localidade) e ao mesmo tempo uma outra característica desta
> > instância,
> > > > > > no caso o ID do Município que é atributo desta localidade
> > > > > > (Localidade.getMunicipio.getId( ). Quando eu seleciono um item, o
> > > > > > valueChangeListener dispara o método
> > > > > > "localidadeMB.selecionarLocalidade" que alimenta a propriedade
> > > > > > "localidade" no managedBean, mas usando
>
> > > > > > <f:param id="codMunicipioLocalidade"
> > > > > > value="#{localidadeMB.localidade.municipio.municipioId}"/>
>
> > > > > > me retorna null, se tento usar isso no validador, assim:
>
> > > > > > String codMun = JSFHelper.getRequestParameter("formInserir" +
> > > > > > NamingContainer.SEPARATOR_CHAR + "codLocalidadeRelacionada");
>
> > > > > > On 8 abr, 18:17, Filipe Aguilar Santana <aguilar.l...@xxxxxxxxx>
> > > > > > wrote:
> > > > > > > Cara não tem que ter um value aqui:
>
> > > > > > > <h:selectOneMenu id="localidade"
> > > > > > >                 valueChangeListener="#{
> > > > > > localidadeMB.selecionarLocalidade}"
> > > > > > >                 validator="localidadeValidator"    ->
> > value="#{???}
> > > > > > > <-         >
>
> > > > > > > ....
> > > > > > > </h:selectOneMenu>
>
> > > > > > > T+,
> > > > > > > Filipe.
>
> > > > > > > Em 8 de abril de 2011 17:59, rogerioag <roggai...@xxxxxxxxx>
> > > > escreveu:
>
> > > > > > > > Como faço para passar um parâmetro para um validador através de
> > um
> > > > > > > > selectOneMenu?
>
> > > > > > > > No selectOneMenu abaixo, gostaria de passar como parâmetro uma
> > > > > > > > propriedade do item que está selecionado naquele instante, para
> > > > poder
> > > > > > > > validá-lo. O problema é que no método validate() da classe
> > > > > > > > LocalidadeValidator não consigo obter este valor, só chega
> > null.
>
> > > > > > > > <h:selectOneMenu id="localidade"
>
> > > > > > valueChangeListener="#{localidadeMB.selecionarLocalidade}"
> > > > > > > >                 validator="localidadeValidator">
> > > > > > > >        <f:selectItem itemValue="0" itemLabel="---"/>
> > > > > > > >        <f:selectItems value="#{localidadeMB.localidades}"/>
> > > > > > > >        <f:param id="codMunicipioLocalidade"
> > > > > > > > value="#{localidadeMB.localidade.municipio.municipioId}"/>
> > > > > > > > </h:selectOneMenu>
>
> > > > > > > > * LocalidadeValidator
>
> > > > > > > > public void validate(FacesContext context, UIComponent ui,
> > Object
> > > > > > > > value) throws ValidatorException {
> > > > > > > >        String x1 = JSFHelper.getRequestParameter("form" +
> > > > > > > > NamingContainer.SEPARATOR_CHAR + "codMunicipioLocalidade");
> > > > > > > >        if(codMunicipio != 999){
> > > > > > > >                FacesMessage msg = new FacesMessage(null,
> > "mensagem
> > > > de
> > > > > > > > erro");
> > > > > > > >                throw new ValidatorException(msg);
> > > > > > > >        }
> > > > > > > > }
>
> > > > > > > > --
> > > > > > > > Você recebeu esta mensagem por que é membro do  Javasf
> > > > > > > >http://groups.google.com/group/javasf
>
> > > > > > > > Conheça também o Java Brazil:
> > > > > >http://groups.google.com/group/thejavabrazil
>
> > > > > > --
> > > > > > Você recebeu esta mensagem por que é membro do  Javasf
> > > > > >http://groups.google.com/group/javasf
>
> > > > > > Conheça também o Java Brazil:
> > > >http://groups.google.com/group/thejavabrazil
>
> > > > --
> > > > Você recebeu esta mensagem por que é membro do  Javasf
> > > >http://groups.google.com/group/javasf
>
> > > > Conheça também o Java Brazil:
> >http://groups.google.com/group/thejavabrazil
>
> > --
> > Você recebeu esta mensagem por que é membro do  Javasf
> >http://groups.google.com/group/javasf
>
> > Conheça também o Java Brazil:http://groups.google.com/group/thejavabrazil

-- 
Você recebeu esta mensagem por que é membro do  Javasf
http://groups.google.com/group/javasf

Conheça também o Java Brazil: http://groups.google.com/group/thejavabrazil

<Prev in Thread] Current Thread [Next in Thread>