1
00:00:00,180 --> 00:00:01,530
Ven, sigamos con la validación.

2
00:00:01,620 --> 00:00:05,190
Bueno, lo primero, si queremos validar, por ejemplo, el formulario.

3
00:00:05,250 --> 00:00:10,320
Recordemos que el formulario está mapeado excepto a el usuario a esta clase POJO.

4
00:00:10,440 --> 00:00:13,380
Entonces acá tenemos que validar esta clase usuario.

5
00:00:13,560 --> 00:00:19,280
Entonces con la anotación paly un espacio bueno, importamos de Java Bali de hecho.

6
00:00:20,280 --> 00:00:26,700
Bueno, vamos a aliar usando anotaciones con el API de validación de Java Java pings valid hecho y mediante

7
00:00:26,790 --> 00:00:30,970
estas anotaciones podemos aplicar reglas de validación que ya vienen predefinidas.

8
00:00:30,990 --> 00:00:35,790
Vienen por debajo, construida en la plataforma Java y en Spring se integran.

9
00:00:35,880 --> 00:00:40,890
Pero otra forma después, por ejemplo, vamos a ver cómo implementar una validación personalizada.

10
00:00:40,980 --> 00:00:42,480
Pero bueno, eso es otro tema.

11
00:00:42,600 --> 00:00:47,640
Después vamos a ver, por ahora vamos a utilizar esta validación es típica que nos sirven para el 99

12
00:00:47,640 --> 00:00:48,720
por ciento de los casos.

13
00:00:49,720 --> 00:00:52,720
Entonces lo primero es habilitar la validación acá.

14
00:00:52,780 --> 00:00:58,930
Cuando se recibe los datos del usuario mapeado al formulario lo siguiente En la clase usuario tenemos

15
00:00:58,930 --> 00:01:00,730
que indicar qué regla de validación.

16
00:01:00,790 --> 00:01:03,760
Usando anotaciones vamos a validar en cada campo.

17
00:01:03,910 --> 00:01:09,460
Por ejemplo, si el Yussef name, el password y el email son requeridos y además son del tipo String.

18
00:01:09,670 --> 00:01:16,330
Entonces podemos validar con Not empty, entonces not empty valida.

19
00:01:16,660 --> 00:01:22,270
Bueno, primero que el string sea distinto en URL y además que tenga un largo el string.

20
00:01:22,480 --> 00:01:23,440
Es decir, que no esté vacío.

21
00:01:23,570 --> 00:01:29,950
Entonces muy importante siempre con los string del tipo texto valíamos con not empty nuevo acío.

22
00:01:30,070 --> 00:01:32,980
Entonces esto se aplica tanto a iUsted name.

23
00:01:33,310 --> 00:01:35,710
También si quiero validar password.

24
00:01:37,010 --> 00:01:37,760
Y también y?

25
00:01:38,120 --> 00:01:41,240
Entonces estos tres campos son requeridos y guardan.

26
00:01:41,420 --> 00:01:45,560
Bueno, también podríamos validar por el IMEI que sea un formato de correo electrónico.

27
00:01:45,650 --> 00:01:49,100
Pero bueno, eso lo vemos después por ahora requerido.

28
00:01:49,220 --> 00:01:50,300
Es decir, no puede ser vacío.

29
00:01:51,020 --> 00:01:56,390
Nos vamos al controlador y de alguna forma por acá en este método, antes de procesar el formulario,

30
00:01:56,540 --> 00:02:02,150
el objeto usuario, por ejemplo, antes de pasarlo lavista o antes de guardarlo en la hace rato, tenemos

31
00:02:02,150 --> 00:02:06,300
que manejar si es válido o no. En el fondo si tuvo error el formulario.

32
00:02:06,440 --> 00:02:12,220
Pero para eso necesitamos pasar o inyectar mediante el método procesar este método handler.

33
00:02:12,440 --> 00:02:17,150
Podemos pasar por argumento el objeto del tipo binding result

34
00:02:20,660 --> 00:02:21,710
y le llamamos result.

35
00:02:21,800 --> 00:02:23,360
Vamos a importar por acá.

36
00:02:23,390 --> 00:02:26,520
Control Barra es una interfaz, un tipo genérico.

37
00:02:27,190 --> 00:02:32,070
Bien, este objeto es propio de Spring y representa el resultado de la validación.

38
00:02:32,150 --> 00:02:33,530
Es decir, contiene los mensajes de error.

39
00:02:33,590 --> 00:02:39,320
En caso de que ocurran errores de que hayan de que falle la validación, entonces tiene toda la información

40
00:02:39,440 --> 00:02:45,410
del resultado de la validación y se inyecta de forma automática cuando está anotado el objeto con vale

41
00:02:45,530 --> 00:02:47,030
el objeto en este caso usuario.

42
00:02:47,120 --> 00:02:52,820
El objeto POJO o Entity, pero tiene una restricción que es muy importante que se respete siempre.

43
00:02:53,030 --> 00:02:58,100
El binding result tiene que estar justo después del objeto que se valida, es decir, el objeto usuario

44
00:02:58,190 --> 00:03:00,770
y el objeto usuario o cualquier objeto que queremos validar.

45
00:03:00,800 --> 00:03:06,020
Cualquier POJO o Entity por lo general es el primer argumento del método tal como lo tenemos acá.

46
00:03:06,410 --> 00:03:11,720
Entonces primero el objeto usuario o que vamos a validar y el segundo el Bingen result.

47
00:03:12,090 --> 00:03:15,890
Siempre tiene que ir después de este objeto que vamos a validar.

48
00:03:16,190 --> 00:03:16,820
Esa es la regla.

49
00:03:16,910 --> 00:03:18,950
Por ejemplo, no ir después de Modell.

50
00:03:19,460 --> 00:03:23,090
Si muevo esto después de Modell, no va a funcionar siempre.

51
00:03:23,240 --> 00:03:26,750
El segundo argumento justo después, en este caso del usuario y listo.

52
00:03:26,840 --> 00:03:27,650
Esa sería la regla.

53
00:03:28,160 --> 00:03:32,700
Luego, usando un if podemos validar result.

54
00:03:32,780 --> 00:03:34,310
Punto jass errors.

55
00:03:34,850 --> 00:03:38,060
Si contiene error, entonces acá manejamos la respuesta.

56
00:03:38,150 --> 00:03:38,740
Por ejemplo.

57
00:03:38,790 --> 00:03:39,710
Bueno, lo típico.

58
00:03:40,760 --> 00:03:41,420
Volvemos.

59
00:03:41,570 --> 00:03:44,900
Retornamos la vista al formulario form.

60
00:03:45,080 --> 00:03:46,490
Eso es lo primero, regresar.

61
00:03:46,580 --> 00:03:51,890
Bueno, también podríamos pasar el título acá, pero mejor es cortarlo y lo dejamos justo acá.

62
00:03:53,090 --> 00:03:57,320
Entonces el título se aplica tanto si ocurre un error o si todo sale bien.

63
00:04:01,440 --> 00:04:02,250
Bien, qué faltaría?

64
00:04:02,370 --> 00:04:07,830
Bueno, faltaría pasar un mensaje de error a la dicta cómo de diferente forma podemos usar, por ejemplo,

65
00:04:07,950 --> 00:04:15,030
un Ashima, un map de Java con el nombre del campo, en este caso el Yussef, el password o el email

66
00:04:15,120 --> 00:04:17,790
y el mensaje error message error lo tenemos desde acá.

67
00:04:17,860 --> 00:04:22,200
Entonces justamente eso vamos a hacer el map del tipo String.

68
00:04:24,450 --> 00:04:24,900
Perfecto.

69
00:04:24,960 --> 00:04:25,740
Importamos.

70
00:04:29,060 --> 00:04:35,780
Errores igual New Map importamos de ya útil.

71
00:04:38,410 --> 00:04:44,890
Bien, entonces ahora usando el result para obtener los mensajes de error, vamos poblando este mapa

72
00:04:44,890 --> 00:04:46,840
con los mensajes de error por cada campo.

73
00:04:48,280 --> 00:04:56,200
Entonces resulto con el método Get fiel Errors por acá, guet fiel, errors en plural.

74
00:04:56,500 --> 00:04:59,560
Una lista es una lista, por lo tanto la trama que iterar.

75
00:04:59,920 --> 00:05:06,940
Punto foreach Por acá tenemos el método Zürich, que recibe una presión blanda, es decir, una función

76
00:05:07,030 --> 00:05:09,640
Ginetta, función que también se le conoce con función de flecha.

77
00:05:09,730 --> 00:05:12,100
Obtenemos el error, el objeto error.

78
00:05:12,220 --> 00:05:19,630
Recuerden que Get Field Errors es una lista, es un array list que contiene los field erros y cada field

79
00:05:19,720 --> 00:05:23,840
error tiene el campo que falló y el mensaje de error correspondiente.

80
00:05:25,090 --> 00:05:27,910
Entonces función de flecha y las llaves.

81
00:05:28,330 --> 00:05:30,170
Entonces por cada uno es un for.

82
00:05:30,190 --> 00:05:35,860
Por lo tanto estamos alterando por cada mensaje error, errores, punto put.

83
00:05:37,140 --> 00:05:42,920
Acá vamos a colocar una llave y un valor bueno, cuál sería la llave del tipo String?

84
00:05:44,100 --> 00:05:44,630
Error.

85
00:05:44,790 --> 00:05:46,530
El objeto que se está emitiendo acá.

86
00:05:46,620 --> 00:05:47,700
El error field.

87
00:05:48,810 --> 00:05:50,560
Punto get field.

88
00:05:50,790 --> 00:05:55,140
Acá obtenemos el nombre del campo o del input que dio el error.

89
00:05:55,230 --> 00:06:01,380
Por ejemplo, USENET o el password o el email y el Valium, el mensaje error que queremos manejar.

90
00:06:01,650 --> 00:06:02,790
Y esto lo podemos personalizar.

91
00:06:03,000 --> 00:06:12,750
Entonces por acá comillas el campo, un espacio y concatenados punto con catt bueno, del objeto string

92
00:06:12,960 --> 00:06:15,690
no cierto concatenados con el nombre campo.

93
00:06:17,180 --> 00:06:17,990
Get field.

94
00:06:19,030 --> 00:06:21,190
Entonces, por ejemplo, el campo Giussani.

95
00:06:22,220 --> 00:06:24,500
Acá volvemos a concatenar junto con Cat.

96
00:06:27,290 --> 00:06:29,740
Un espacio y volvemos a concatena.

97
00:06:29,930 --> 00:06:30,500
Punto.

98
00:06:31,500 --> 00:06:36,680
Bueno, esto me pareció usar el más para concatenar un string, pero más orientado objeto y también

99
00:06:36,770 --> 00:06:42,470
más optimizado, porque es más, lo que hace es crear una instancia de un string y acá estamos anexando

100
00:06:42,560 --> 00:06:47,150
más contenido, más secuencia de carácter al mismo objeto, al mismo string.

101
00:06:47,360 --> 00:06:52,010
Entonces, en el fondo estamos guardando menos objetos en la memoria, un solo string versus versus,

102
00:06:52,010 --> 00:06:56,030
el más que crea diferentes instancias del string que vamos a concatenar.

103
00:06:56,300 --> 00:06:57,050
Al final tampoco.

104
00:06:57,050 --> 00:07:01,250
No es tan tremendo, pero es mejor concatenar con el mensaje.

105
00:07:02,360 --> 00:07:09,980
Por acá tenemos get default message por acá get default, message el mensaje y listo.

106
00:07:10,190 --> 00:07:16,550
Ahí estamos poblando nuestro mapa, que es un arreglo asociativo, una lista asociativa basada en nombre

107
00:07:16,550 --> 00:07:17,000
y valor.

108
00:07:17,120 --> 00:07:20,330
El nombre corresponde al nombre campo y el valor mensaje error.

109
00:07:20,550 --> 00:07:27,200
Bueno, y que faltaría pasar a la vista errores entonces models a atributo por acá.

110
00:07:30,800 --> 00:07:32,130
Errores o error?

111
00:07:32,150 --> 00:07:33,800
Mejor le podemos llamar error.

112
00:07:34,280 --> 00:07:36,020
Da lo mismo, y acá errores.

113
00:07:38,560 --> 00:07:44,080
Bien, le dimos en singular herrores porque contiene, por ejemplo, error, punto Yussef, error,

114
00:07:44,080 --> 00:07:47,080
punto, password, error, punto y así por cada uno.

115
00:07:48,110 --> 00:07:49,670
Y herrores el objeto.

116
00:07:50,090 --> 00:07:51,110
Bien, estamos listos.

117
00:07:51,260 --> 00:07:53,960
Guardamos y qué faltaría implementar la vista.

118
00:07:54,110 --> 00:07:56,750
Es decir, mostrar los mensajes de error en la vista formulario.

119
00:07:56,810 --> 00:07:59,030
Pero bueno, eso lo vemos en la siguiente clase.

120
00:07:59,140 --> 00:08:00,050
Ah, y un detalle.

121
00:08:00,260 --> 00:08:04,610
Esta sería la forma manual de obtener un mensaje de error no cierto del objeto.

122
00:08:04,700 --> 00:08:05,630
Bingen result.

123
00:08:05,720 --> 00:08:08,240
Con los métodos get field errors el foreach.

124
00:08:08,300 --> 00:08:13,220
Bueno, de esa forma manual obtenemos los mensajes, lo guardamos en un mapa y después lo pasamos a

125
00:08:13,220 --> 00:08:13,550
la lista.

126
00:08:13,610 --> 00:08:18,950
Pero después vamos a ver otra forma mucho más automática a través de atributos de timeline, pero después

127
00:08:18,950 --> 00:08:19,340
lo vemos.

128
00:08:19,400 --> 00:08:20,990
Continuamos en la siguiente clase.
