El siguiente es una adaptacion sencilla del plugin de animacion shake, sobre Struts2 y Jquery plugin y Maven.
Estructura de la aplicacion:
4.0.0 org Struts2_ej_01 war 1.0 Struts2_ej_01 Maven Webapp http://maven.apache.org javax.servlet servlet-api 2.5 provided org.apache.struts struts2-core 2.3.16.3 org.apache.struts struts2-convention-plugin 2.3.16.3 org.apache.struts struts2-json-plugin 2.3.16.3 com.jgeppert.struts2.jquery struts2-jquery-plugin 3.7.1 Struts2_ej_01 org.apache.maven.plugins maven-compiler-plugin 1.6 1.6
Crer archivo login.jsp en src\main\webapp\User\pages
-
Agregar las siguientes taglibs:
<%@ taglib prefix="s" uri="/struts-tags" %> <%@ taglib prefix="sj" uri="/struts-jquery-tags" %>
-
Sección HEAD:
<link href='<s:url value="/resources/css/style.css" />' rel="stylesheet"></link> <sj:head jquerytheme="redmond" > <script src='<s:url value="/resources/js/jquery.ui.shake.js" />'></script> <script> $.subscribe('beforeSubmit', function(event,data){ $("#error").html(''); }); $.subscribe('submitComplete', function(event,data){ var usuario=event.originalEvent.request.responseJSON.userName; if(event.originalEvent.request.responseJSON.loginValido=='OK'){ $('#box') .toggle( "explode", function(){ $('#box').html( '<table>'+ '<tr>'+ '<td><img src="<s:url value="/resources/images/ok.png"/>" /></td>'+ '<td><span style="font-weight:bold;"> Bienvenido '+usuario + '</span>'+ '</td>'+ '</tr>'+ '</table>' ); $('#box').toggle("explode"); } ); }else{ //Shake animation effect. $('#box').shake(); $("#error").html( '<table>'+ '<tr>'+ '<td><img src="<s:url value="/resources/images/error.png"/>" /></td>'+ '<td>'+ '<span style="color:#cc0000;font-weight:bold;">Error:</span>'+ '<span style="color:#cc0000;">el usuario y/o la contraseña no son validos.</span>'+ '</td>'+ '</tr>'+ '</table>' ); } }); </script> </sj:head> -
Sección BODY:
<div id="main"> <sj:div cssclass="result ui-widget-content ui-corner-all" cssstyle="width:300px;" delay="3000" effect="explode" effectduration="1500" id="divContentResult"> </sj:div> <div id="box"> <s:form action="Login" id="loginForm" theme="xhtml"> <h2>Identificate</h2> <img id="indicator" src='<s:url value="/resources/images/indicator.gif"/>' alt="Cargando..." style="display:none" /> <s:textfield cssclass="input_text ui-widget ui-widget-content ui-corner-all campoTexto" label="Usuario" name="userName" size="10" /> <s:password cssclass="input_text ui-widget ui-widget-content ui-corner-all campoTexto" label="Contraseña" name="password" size="10" /> <sj:submit id="btnEntrar" button="true" value="Entrar" indicator="indicator" formIds="loginForm" onCompleteTopics="submitComplete" onBeforeTopics="beforeSubmit" targets="divContentResult" cssStyle="float:right;" /> <div style="clear: both;"></div> <div id="error"> </div> <div style="clear: both;"> </div> </s:form> </div> <!-- Cierre div id="box" --> </div> <!-- Cierre div id="main" -->
Crear LoginAction en src\main\java\org\action:
package org.action;
import java.util.Map;
import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.Namespace;
import org.apache.struts2.convention.annotation.ParentPackage;
import org.apache.struts2.convention.annotation.Result;
import org.apache.struts2.convention.annotation.ResultPath;
import org.apache.struts2.dispatcher.SessionMap;
import org.apache.struts2.interceptor.SessionAware;
import com.opensymphony.xwork2.ActionSupport;
@Namespace("/User")
@ResultPath(value="/")
@ParentPackage("json-default")
public class WelcomeUserAction extends ActionSupport implements SessionAware{
private static final long serialVersionUID = 1L;
private SessionMap<String,Object> sessionMap;
@Override
public void setSession(Map<String, Object> map) {
sessionMap=(SessionMap)map;
}
private String userName;
private String password;
private String loginValido;
@Action(
value="Login",
results={
@Result(
name="success",
type="json"
)
}
)
public String execute(){
System.out.println("U="+this.userName);
System.out.println("P="+this.password);
if(
this.userName.equalsIgnoreCase("cespower")
&&
this.password.equalsIgnoreCase("1234")
){
this.loginValido="OK";
this.sessionMap.put("userName", this.userName);
}else
this.loginValido="ERROR";
return SUCCESS;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getLoginValido() {
return loginValido;
}
}
Al final, el login debe funcionar de la siguiente manera:
