2
respostas

[Dúvida] Habilitar componentes jsf ao clicar em um commandButton - Complemento código

Eu não sabia como direcionar para o colaborador que começou a ajudar anteriormente. Refiz a pergunta.

Olá Victor, tentei postar parte do código porem extrapolou a quantidade máxima. deixei o link do Google drive para facilitar. Usei Dialog nas telas de cadastro e consulta.

Minha necessidade seria: Ao clicar em novo ele desabilitaria o próprio componente e habilitaria os do form, uso essa logica em minha aplicação desktop, porém Web é totalmente diferente.

Outra pergunta no desenvolvimento desktop eu tenho atalhos tipo F2 pressiona o botão novo, F3 desfazer e por ai vai. Se puder essa força agradeço. Att.

Bom que se alguém vir este no grupo pode utilizar para tirar alguma ideia e melhorar. Segue link código fonte. https://1drv.ms/u/c/55771f463d624688/EcWbek9xRBhCobUY2c3lofEBQfyiDHhekKH8nVcPfdGuCg?e=721xI2

2 respostas

ola!

Habilitar e desabilitar componentes com commandButton

Você pode controlar isso com variáveis booleanas no seu Managed Bean. Exemplo:

<h:form>
    <h:commandButton value="Novo" action="#{meuBean.acaoNovo}" 
                     disabled="#{meuBean.desabilitaNovo}" 
                     id="btnNovo" />

    <h:inputText value="#{meuBean.nome}" 
                 disabled="#{meuBean.desabilitaFormulario}" />
</h:form>

No seu Bean:

@ManagedBean
@ViewScoped
public class MeuBean {
    private boolean desabilitaNovo = false;
    private boolean desabilitaFormulario = true;
    private String nome;

    public void acaoNovo() {
        desabilitaNovo = true;
        desabilitaFormulario = false;
    }

    // Getters e setters
}

Atalhos de teclado (F2, F3...) com JavaScript

Você pode usar JavaScript puro com PrimeFaces ou JSF puro. Exemplo com atalho F2 para clicar no botão "Novo":

<h:outputScript>
    document.addEventListener('keydown', function(e) {
        if (e.key === 'F2') {
            e.preventDefault();
            document.getElementById("#{p:component('btnNovo')}").click();
        }
    });
</h:outputScript>

Se não estiver usando PrimeFaces, substitua #{p:component('btnNovo')} por o id do botão completo, como: formId:btnNovo.

Usando <p:dialog> com PrimeFaces

Se estiver usando dialog, certifique-se de colocar os componentes dentro do update da chamada:

<p:commandButton value="Novo" action="#{meuBean.acaoNovo}" 
                 update="formId" process="@this" />

Assim os componentes são atualizados corretamente na interface após o clique.

Obrigado, deu certo, eu criei o método para desfazer quando estiver selecionado e voltar a condição de desabilitar quando pressionar F3. Ficou assim. Acho que vai ficar bom quando eu terminar este projeto. Vou te mostrar como está ficando a tela de cadastro e consulta.

Ficou muito bom. Obrigado.

Outra dúvida seria, em como preencher a cidade colocando o código dela usando javaScritpt, vou ter varias telas de consulta dentro do cadasto de pessoa por exemplo tem varias consultas eu apertaria F9 com foco no componente ele abrir a tela de consulta por exemplo: Consulta Cidade ou quand InputText se eu colocar id 1 e sair do foco ele preenche o componente nome do orgão e por ai vai.

 public void acaoDesfazer() {
        desabilitaNovo = false;
        desabilitaFormulario = true;
    }

Insira aqui a descrição dessa imagem para ajudar na acessibilidade consulta de cidade Insira aqui a descrição dessa imagem para ajudar na acessibilidade Ja carrega a cidade habilitada, ficou top inverti com o metodo citado acima. Insira aqui a descrição dessa imagem para ajudar na acessibilidade quando eu clico em desfazer ele desabilita.