validation jsf

validation - Forzar a JSF a procesar, validar y actualizar componentes de entrada de solo lectura/deshabilitados



(3)

Encontré otra solución:

function stopEvent(event){ event.stopPropagation(); event.preventDefault(); } onkeyup="stopEvent(event)" onkeydown="stopEvent(event)" onkeypress="stopEvent(event)"

Estoy creando una calculadora donde un usuario puede hacer varias operaciones haciendo clic en el teclado numérico virtual. Ahora quiero restringir al usuario para que solo seleccione los diversos caracteres haciendo clic en los botones y no podrá ingresar los valores con el teclado. Intenté usar readonly="true" pero no es validar la entrada ni establecer los valores en el bean cuando hacemos clic en cualquier botón.

¿Tenemos alguna restricción de este tipo disponible en jsf?


Ese es el efecto de la protección de JSF contra solicitudes alteradas / atacadas en las que el pirata informático intenta eludir el atributo de readonly (y disabled ) manipulando el HTML DOM y / o la solicitud HTTP.

En vez de

<x:inputXxx ... readonly="true">

utilizar

<x:inputXxx ... readonly="#{facesContext.currentPhaseId.ordinal eq 6}">

o

<x:inputXxx ... readonly="#{not facesContext.postback or facesContext.renderResponse}">

Esto asegura que readonly solo sea efectivo durante la fase de respuesta de renderizado y no durante todas las demás fases JSF. Entonces, cuando JSF está a punto de decodificar el componente de entrada durante la fase de solicitud de valores de solicitud, considerará readonly="false" esta manera.

Ver también:

  • otros usos de #{facesContext.currentPhaseId.ordinal}

Los códigos de tecla para la fila superior de números son 48-57, por lo que podría escribir una función para desactivar la pulsación de teclas en esos caracteres.

Algo como esto

function disableEnter(event) { var charCode = (event.which) ? event.which : event.keyCode; if (charCode > 31 && (charCode > 47 || charCode < 58)) { return false;} } else return true; } <h:inputText onkeypress="return disableEnter(event);" />