21 jun 2017

Struts2 - Action (profundizando) y III

Introduccion

Tras la entradas anteriores
Struts2 - Action (profundizando)
Struts2 - Action (profundizando) II

Vamos a ver la ultima parte sobre los Actions que sería la parte de Error and Action Message


Action Error and Action Message

1. etiqueta ActionError : Esta etiqueta se utiliza en conjunción con la validación de la clase de acción para campos de formulario. Si la validación falla por cualquier campos de formulario, podemos añadir los errores de acción y luego Struts 2 reenvía la petición de “entrada” a la página de resultados en la que podemos utilizar esta etiqueta para mostrar los mensajes de error. 
Esta etiqueta es útil en la validación del lado del servidor para campos de formulario y luego volver  a la página de entrada con el mensaje de error. Sintaxis de esta etiqueta es:


2. etiqueta actionmessage: Esta etiqueta se utiliza para mostrar un mensaje personalizado añadido por las clases de acción en la página de resultados. Por ejemplo, podemos utilizar esta etiqueta para recibir a un usuario y mostrar la última hora de entrada en la parte superior de la página. 
La sintaxis de esta etiqueta es:


Ambas etiquetas generan una lista desordenada de los errores de acción o mensajes añadidos en la clase de acción.

Objetivos

Seguimos con nuestro proyecto:

Vemos que ahora tenemos un fichero global.properties


1
2
3
4
5
6
7
8
9
#global messages
msg.welcome=Hi
label.username=User Name
label.password=Password
label.submit.login=Login

#error messages
error.username.required=User Name is required field
error.password.required=Password is required field

Vemos ahora nuestro LoginModelDrivenAction

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
package com.mr.knight.struts2.action;

import org.apache.struts2.convention.annotation.Namespace;
import org.apache.struts2.convention.annotation.Result;
import org.apache.struts2.convention.annotation.ResultPath;
import org.apache.struts2.convention.annotation.Results;

import com.mr.knight.beans.User;
import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;

@org.apache.struts2.convention.annotation.Action("loginModelDriven")
@Namespace("/User")
@ResultPath("/")
@Results({ @Result(name = "success", location = "homeModelDriven.jsp"),
  @Result(name = "input", location = "loginModelDriven.jsp") })
public class LoginModelDrivenAction extends ActionSupport implements Action, ModelDriven<User> {

 @Override
 public String execute() throws Exception {
  if ("jose".equals(user.getUserID()) && "admin".equals(user.getPassword())) {
   user.setUserName("Jose Caballero");
   addActionMessage("Welcome Admin, do some work.");
   return SUCCESS;
  } else {
   addActionError("User name is not valid");
   addActionError("Password is wrong");
   return INPUT;
  }
 }

 @Override
 public User getModel() {
  return user;
 }

 private User user = new User();

}


Vemos los métodos:
addActionMessage("Welcome Admin, do some work.");
addActionError("User name is not valid");

Y vemos como se representan:


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<%@ page language="java" contentType="text/html; charset=US-ASCII"
 pageEncoding="US-ASCII"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%-- Using Struts2 Tags in JSP --%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<title>Login Page</title>
<!-- Adding CSS for Styling of error messages -->
<style type="text/css">
.errorDiv {
 background-color: gray;
 border: 1px solid black;
 width: 400px;
 margin-bottom: 8px;
}
</style>
</head>
<body>
 <h3>Welcome User, please login below</h3>
 <s:if test="hasActionErrors()">
  <div class="errorDiv">
   <s:actionerror />
  </div>
 </s:if>
 <s:form action="loginModelDriven">
  <s:textfield name="userID" label="User Name"></s:textfield>
  <s:textfield name="password" label="Password" type="password"></s:textfield>
  <s:submit value="Login"></s:submit>
 </s:form>
</body>
</html>



Con esto termino la serie de 3 posts sobre las Action class de Struts2.
Para el lector queda el profundizar en estos temas, y enlazarlo con la parte del Backen final, bien con conexiones a servicios REST, o con una conexión a BD directamente.

Share This!



No hay comentarios:

Publicar un comentario

Nota: solo los miembros de este blog pueden publicar comentarios.