Validación de Struts 2 usando el Interceptor del Almacén de Mensajes

Tengo una acción en la que estoy intentando iniciar sesión en el usuario.

public class RegisteredUserAction extends ActionSupport implements SessionAware {
..
..
 public String login() throws Exception {

        DBLogic dBLogic = new DBLogic();
        RegisteredUser user = null;
        try {
            user = dBLogic.getRegisteredUser(getUserUsername(), getUserPassword());
        } catch (CredentialException e) {
            addFieldError("userUsername", e.getMessage());

            addActionError(e.getMessage());
            return INPUT;
        }

        if (user != null) {
            session.put("user", user);
            return SUCCESS;
        }

        return ERROR;
    }
}

Como puede ver, si el nombre de usuario o la contraseña no son válidos, lanzo una CredentialException y luego relleno ese mensaje de excepciones en mi campoError. Incluso intenté agregar un error de acción.

Con algunos consejos y búsquedas en línea, logré usar el Interceptor del Almacén de Mensajes usando anotaciones en el RegisteredUserAction.action y MainAction.action respectivamente almacenando y obteniendo.

import org.apache.struts2.convention.annotation.InterceptorRef;
import org.apache.struts2.convention.annotation.InterceptorRefs;
@InterceptorRefs({
    @InterceptorRef(value = "store", params = {"operationMode", "STORE"}),
    @InterceptorRef("defaultStack"),})

Y

import org.apache.struts2.convention.annotation.InterceptorRefs;

@InterceptorRefs({
    @InterceptorRef(value = "store", params = {"operationMode", "RETRIEVE"}),
    @InterceptorRef("defaultStack"),})

Este es el contenido del archivo struts.xml que es relevante:

<package name="pages" extends="struts-default" namespace="/">
        <global-results>
            <result name="displayPage">/WEB-INF/template/page.jsp</result>
            <result name="input">/WEB-INF/template/page.jsp</result>
        </global-results>
        <action name="registrationPage" class="actions.MainAction" 
              method="loadRegistrationPage"></action>
        <action name="loginPage" class="actions.MainAction" 
              method="loadLoginPage"></action>
</package>

<package name="operations" extends="struts-default" namespace="/">

        <action  name="userLogin" class="actions.RegisteredUserAction" method="login">
            <result type="redirect" name="input">loginPage.action</result>
            <result type="redirect" name="success">homePage.action</result>
        </action>
</package>

Estoy utilizando un enfoque basado en plantillas en el que el contenido Medio (en mi caso, LoginPage.jsp) se incluye en la página principal de forma dinámica.

Mi page.jsp (que incluye el mainContent):

<s:include value="../%{mainContent}.jsp" ></s:include>

Mi login.jsp (que se incluye):

<%@taglib prefix="s" uri="/struts-tags"%>

<s:form action="userLogin" method="POST">
    <s:textfield name="userUsername" />Error:<s:fielderror name="userUsername" />
    <s:password name="userPassword" />
    <s:submit />
</s:form>

La redirección funciona correctamente y aparece el formulario de inicio de sesión, pero no hay errores. Incluso he intentado usar el interceptor del Almacén de mensajes en el archivo struts.xml sin suerte. :(

Respuestas a la pregunta(1)

Su respuesta a la pregunta