2012-03-08 26 views
6

¿Hay alguna manera de validar un texto de entrada jsf que sea de solo lectura, pero el valor se modifique después de algunos otros eventos desencadenados?jsf (richfaces) readonly input text validation

+2

llenar no sería más fácil para validarlo en el bean de respaldo página JSF? – Richie

+0

¿Y cómo puedo activar la validación y emitir el mensaje de validación? –

+0

He agregado una respuesta como respuesta al comentario. Cheers – Richie

Respuesta

2

He resuelto este problema con una solución alternativa. He añadido un campo inputHidden que tiene el atributo truerequired que no aparecerá en la interfaz, pero se validará:

<h:inputHidden value="#{bean.value}" required="true" 
        requiredMessage="Data must be entered" /> 

El valor de bean.value se cambia por otro evento, y en algún reRender en el inputHidden, la validación tiene lugar.

1

Lo más probable es que tenga que llamar manualmente la lógica de validación directamente desde su evento. Aquí hay un modelo del ciclo de vida JSF de IBM.

enter image description here

Usted notará que la fase validaciones de proceso se produce antes de la fase de aplicación de invocación donde los eventos normalmente se tratan. Esto ocurre mucho después de que la validación no ocurra automáticamente.

2

Respondiendo desde el comentario: "¿No sería más fácil validarlo en el bean de respaldo de la página jsf?" Puede realizar la validación de nivel de aplicación con un clic de botón o algún evento similar. Puede hacer algo como esto en su bean de respaldo y vincularlo al evento.

public String login(){ 
     FacesContext context = FacesContext.getCurrentInstance(); 
     if(**<<some validation for value in field 'firstName' in form 'userForm'>>**){ 
      FacesMessage message = new FacesMessage(); 
      message.setSeverity(FacesMessage.SEVERITY_ERROR); 
      message.setSummary("Some Valication check"); 
      message.setSummary("Some Valication check!!"); 
      context.addMessage("userForm:firstName", message);//adds validation message for field firstName in form userForm 
      return "ERROR"; 
     } 
     return "SUCCESS"; 
    } 

Hope this help.

+0

JSF no actualizará el valor del modelo para una entrada 'readonly =" true "'. Además, hacer valdation dentro de un método de acción en lugar de dentro de un validador normal es una práctica pobre. – BalusC

+0

@BalusC Gracias por la información :) No sabía que la configuración readonly = "true" para la entrada no actualizaría el valor del modelo. En cuanto a hacer la validación dentro de una acción, sé que no es la mejor de las prácticas, pero creo que es posible que no podamos agregar el validador normal para la entrada de solo lectura. – Richie

12

Establezca el atributo readonly en true solo durante la fase de respuesta de procesamiento. De esta forma, no se verá como solo de lectura en todas las otras fases que no sean la fase de respuesta de renderizado.

<h:inputText ... readonly="#{facesContext.currentPhaseId.ordinal eq 6}" /> 
+2

En mi caso, '# {facesContext.renderResponse} devuelve falso al dibujar el HTML (si se hubiera impreso en medio de él). De todos modos, funciona como '# {facesContext.currentPhaseId.ordinal eq 6}'. Mojarra 2.1.9. – SJuan76

Cuestiones relacionadas