Pergunta

Gostaria de saber se é possível congelar ou desativar todo o formulário de atualização? Eu tenho um formulário de entrada: formulário com uma caixa de seleção. Quando os usuários verificam a caixa, eu gostaria de congelar ou desativar todo o formulário para que os usuários desocupem a alteração de entradas.

Obrigado, e estou usando JSF, Spring Web Flow, Facelets e Trinidad.

Foi útil?

Solução

Se você deseja desativar apenas certas entradas, é uma boa ideia enumerá -las:

function OptCheckBox(chkd) {
 if (chkd == 'y') {
  document.frm.input1.disabled = true;
  document.frm.input2.disabled = true;
 }
}

Outras dicas

Você deseja usar o JavaScript para definir todas as entradas do formulário para desativar quando o usuário verificar a caixa de seleção. Algo como:

document.getElementById('id').disabled = true;

Você faria isso para cada elemento de entrada em que 'ID' é o ID desse elemento.

Você não pode desativar um formulário inteiro de uma só vez. Você realmente precisa desativar cada um dos elementos de entrada. Existem basicamente duas maneiras de conseguir isso.

A primeira maneira é usar o JavaScript para enviar o formulário ao servidor quando a caixa de seleção for clicada, para que você possa usar o JSF Component's disabled atribuir para desativar os elementos. Aqui está um exemplo básico:

<h:form>
    <h:selectBooleanCheckbox value="#{bean.freeze}" onclick="submit()" />
    <h:inputText value="#{bean.value1}" disabled="#{bean.freeze}" />
    <h:inputText value="#{bean.value2}" disabled="#{bean.freeze}" />
    <h:inputText value="#{bean.value3}" disabled="#{bean.freeze}" />
</h:form>

Aqui #{bean.freeze} deve apontar para um boolean propriedade.

A segunda maneira é escrever uma função JavaScript para isso. Isso não requer um formulário enviar e salva você de um ciclo de resposta a solicitações HTTP, o que é melhor para a experiência do usuário.

<h:form>
    <h:selectBooleanCheckbox onclick="disableForm(this)" />
    <h:inputText value="#{bean.value1}" />
    <h:inputText value="#{bean.value2}" />
    <h:inputText value="#{bean.value3}" />
</h:form>

A função JS disableForm() é basicamente simples. Basta passar na caixa de seleção como argumento da função por this para que você possa obter o formulário pai por checkboxElement.form e então obtenha todos os elementos de formulário por form.elements. Você só precisa garantir que não desative a própria caixa de seleção, para que possa reativar o formulário novamente :)

function disableForm(checkboxElement) {
    var elements = checkboxElement.form.elements;
    for (var i = 0; i < elements.length; i++) {
        var element = elements[i];
        if (element != checkboxElement) {
            element.disabled = checkbox.checked;
        }
    }
}

Não há necessidade de saber o ID de antemão e isso torna o código JS genérico e reutilizável.

Espero que isto ajude.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top