Retornar valor encontrado numa modalPanel para a tela que a chamou?  XML
Índice dos Fóruns » Desenvolvimento Web
Autor Mensagem
Grinvon
GUJ Master
[Avatar]

Membro desde: 18/08/2003 22:10:49
Mensagens: 1899
Localização: Em qualquer lugar
Offline

Criei um modal panel (rich:modalPanel) onde o mesmo desejo fazer sincronia com um uma inputText, a idéia é quando abrir um modal panel, o mesmo apresenta uma caixa de texto, onde o que eu digitar nela ao fechar o modal irá fazer a sincronia com o inputText da tela chamadora.

Essa idéia na prática não irá acontecer no sistema, mas preciso saber como faço esse retorno, pois na verdade a minha tela no modal é uma tela de seleção onde há uma lista de valores e quando eu selecionar um registro, a descrição do mesmo deverá voltar para o inputText.

Fazer o modal eu sei, chamá-lo também, preencher uma dataTable nele também, saber qual registro foi selecionado pelo usuário nessa dataTable também, o problema se encontra no retorno, como irá retornar esse valor para a minha tela chamadora.

Uma prévia do código:

Tela que chamará o panel e apresenta um inputText que receberá o valor


código do meu panel que será renderizado na página chamadora, repare que há dados de uma lista (datatable) mas para simplificar e focalizar no problema, preciso saber como devo retornar valor para um input da tela que chamou a modal



Qualquer ajuda é válida, já que meu problema atual é justamente no retorno desse registro selecionado. Obrigado a todos.

>> Inocêncio.
[MSN] [ICQ]
Javabuntu
GUJ Master
[Avatar]

Membro desde: 08/02/2007 17:15:32
Mensagens: 1315
Localização: Brasília
Offline

colega isto é muito simples.

no seu botão de fechar a modal adicione uma action que pega o valor digitado, e deixar o fechar no oncomplete que executa o script após a action:


e ai no seu bean

SCJP 6
SCJD
SCWCD 5
Itil V2
[MSN]
Grinvon
GUJ Master
[Avatar]

Membro desde: 18/08/2003 22:10:49
Mensagens: 1899
Localização: Em qualquer lugar
Offline

Valeu jababuntu.

Já descobri um erro que cometi.

no f:setPropertyActionListener o targer DEVE ser para a lista da minha tela chamadora e não a tela que irá ter a modal.

Mesmo assim a questão ainda não está fechada.

Você colocou mudaValor no bean da tela que irá processar o modal, porém o bean dela não pode saber qual o bean da tela que a chamou, isso cria dependência.

>> Inocêncio.
[MSN] [ICQ]
Javabuntu
GUJ Master
[Avatar]

Membro desde: 08/02/2007 17:15:32
Mensagens: 1315
Localização: Brasília
Offline

Grinvon wrote:Valeu jababuntu.

Já descobri um erro que cometi.

no f:setPropertyActionListener o targer DEVE ser para a lista da minha tela chamadora e não a tela que irá ter a modal.

Mesmo assim a questão ainda não está fechada.

Você colocou mudaValor no bean da tela que irá processar o modal, porém o bean dela não pode saber qual o bean da tela que a chamou, isso cria dependência.


não precisa ser no bean da tela que chamou pode ser em outro local, num outro bean...
e ai você pode passar esse parâmetro pra uma classe de negócio que tenha acesso ao bean, e ai você faz o set...
não precisa criar a dependência, foi só exemplo...

SCJP 6
SCJD
SCWCD 5
Itil V2
[MSN]
Grinvon
GUJ Master
[Avatar]

Membro desde: 18/08/2003 22:10:49
Mensagens: 1899
Localização: Em qualquer lugar
Offline

Agora está retornando valor, mas um problema...

Quando eu clico para chamar o modal e não há nada selecionado, automaticamente o JSF executa o método da minha classe chamadora que irá popular o inputText, e eu não quero que isso ocorra nesse momento, quero que ele execute esse método apenas quando for fechada a modal.

Código do botão na tela chamadora




  • Métodos:

    - chamadora.atualizarSelecaoNatureza

    Ele irá popular a minha inputText com um registro da lista.


  • Tentei colocar o a4j:support para fazer isso, no evento "oncomplete" mas não funcionou, ele acaba sempre chamando o método atualiarSelecaoNatureza em todo momento que o botao for clicado.

    >> Inocêncio.
    [MSN] [ICQ]
    Javabuntu
    GUJ Master
    [Avatar]

    Membro desde: 08/02/2007 17:15:32
    Mensagens: 1315
    Localização: Brasília
    Offline

    me esclareça uma dúvidas:

    por acaso o seu objetivo real seria:

    chamar uma popup modal, neste modal irá fazer uma consulta que irá listar numa tabela, e ai um uma determinada coluna serão links, que ao clicar nesta linha selecionada a popup irá fechar e automaticamente mandar o valor de volta pra outra tela.

    seria isso?

    SCJP 6
    SCJD
    SCWCD 5
    Itil V2
    [MSN]
    Grinvon
    GUJ Master
    [Avatar]

    Membro desde: 18/08/2003 22:10:49
    Mensagens: 1899
    Localização: Em qualquer lugar
    Offline

    Tenho dois beans e duas jspx

    Telas:



    ao clicar em um botão de chamadora, irá abrir o modal, do qual irá apresentar a lista preenchida.

    Nessa dataTable existem checkbox onde posso selecionar os registros, ao selecionar esses registros e apertar em confirmar, essa lista deverá ser passada para a tela chamadora que irá processar o que desejar com esses registros, inclusive mostrar um deles em um input por exemplo.

    Nesse caso preciso declarar duas listas em cada bean

    Em beans de Chamadora e Modal
    List<MinhaEntidade> lista = new ArrayList<MinhaEntidade>();

    essas duas listas ficam em sincronia usando:


    Essa tag é colocada dentro do botão de ação que chamará a tela modal.

    >> Inocêncio.
    [MSN] [ICQ]
    Grinvon
    GUJ Master
    [Avatar]

    Membro desde: 18/08/2003 22:10:49
    Mensagens: 1899
    Localização: Em qualquer lugar
    Offline

    Javabuntu, consegue fazer aqui. E acho que resolverá o problema de muita gente. Não ficou perfeito, mas já é um startup.

    Primeiro: Criar o arquivo isolado onde conterá a lógica da tela.

    Segundo: Criar um botão na tela que irá chamar a outra, renderizando em forma modal:

    Código do botão que irá carregar a modal. Sua única tarefa é chamar a modal, nada mais do que isso.


    na tela chamadora, declarar uma área onde será destinada para o rich:modalPanel, a modal está em form modal e nome minhaModal: modal:minhaModal. E terá um ajax support para quando for fechada executar o método da bean chamadora que processará as informações recebidas dela. Essas informações são sincronizadas através de duas listas, uma para cada managed bean.


    No bean da tela para a modal, você pode adicionar a lógica de popular uma grid, um campo apenas, uma list, etc, dessa forma a pessoa terá que saber como obter informações desses componentes e popular ele numa ArrayList que no caso é usado para fazer a sincronia entre as telas. No botão da modal é efetuada duas operações: hide na modal e executar o método da classe chamadora que irá processar as informações; Repare que existe um reRender que renderizará nesse meu caso uma h:inputText.

    >> Inocêncio.
    [MSN] [ICQ]
    Javabuntu
    GUJ Master
    [Avatar]

    Membro desde: 08/02/2007 17:15:32
    Mensagens: 1315
    Localização: Brasília
    Offline

    entendi, se resolveu problema blz.

    Agora um comentário:

    eu uso JSF, mas não coloco lógica nenhuma no bean que está ligado nos componentes, é como se eu tivesse um bean de request onde coloco todas minhas ações e tenho um bean dependendo do caso como session, onde tenho meus atributos... é como se eu tivesse um ModalAction e um ModalBean, e neste último coloco só get e set, e da action eu acesso e faço minhas lógicas..


    SCJP 6
    SCJD
    SCWCD 5
    Itil V2
    [MSN]
    Grinvon
    GUJ Master
    [Avatar]

    Membro desde: 18/08/2003 22:10:49
    Mensagens: 1899
    Localização: Em qualquer lugar
    Offline

    Criei uma dependência, agora vou tentar tirar isso.

    >> Inocêncio.
    [MSN] [ICQ]
    programmerms
    Smalltalk

    Membro desde: 04/04/2010 20:10:07
    Mensagens: 2
    Offline

    Poderia , postar todo o codigo

    vlw
     
    Índice dos Fóruns » Desenvolvimento Web
    Ir para:   
    Powered by JForum 2.1.8 © JForum Team