有了前面做够的准备,我们现在可以来做登入了。
首先打开我们的login.js,在登入按钮事件那里写上
function login()
{
//用户登入方法---表单提交
if(formPanel.form.isValid()){
Ext.MessageBox.show({
title:"请等待",
msg:"正在加载",
progressText:"",
width:300,
progress:true,
closable:false,
animEl:'loding'
});
var f = function(v){
return function(){
var i = v/11;
Ext.MessageBox.updateProgress(i,'');
}
}
for(var i = 1; i < 13; i++){
setTimeout(f(i),i *150);
}
//提交到服务器操作
formPanel.form.doAction("submit",{
url:"Login.action",
method:"post",
success:function(form,action){
//登入成功
Ext.Msg.alert('登入成功',action.result.message);
},
failure:function(form, action){
Ext.Msg.alert('登录失败',action.result.message);
}
});
}
}
此时前台表单已经提交了,提交的地址是Login.action,我们这是配置structs.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<package name="extjs4" extends="json-default" namespace="/">
<!-- 编写Action -->
<action name="Login" class="login.Action" method="validate_login">
<result type="json"></result>
</action>
</package>
</struts>
说明:
action name="Login":和表单提交的url一样
class="login.Action":处理表单的类
method="validate_login":类里面具体处理表单的方法
<result type="json">:返回json类型给前台
看到这里,现在我们自然要去编写login.Action类了
具体代码:
package login;
import java.util.ArrayList;
import java.util.Hashtable;
import java.util.List;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import com.opensymphony.xwork2.ActionSupport;
public class Action extends ActionSupport {
/**
*
*/
private static final long serialVersionUID = 1L;
final String pjName = moduleName();//获取ejb调用名
public String username;//与表单的 账号同名,通过get方法获取
public String password;//与表单的 密码同名,通过get方法获取
public String message;//返回给前台的信息
public boolean success;//登入结果,true为登入成功
public String moduleName(){
//ejb:/projectName
return "ejb:/"+"Person"+"/";
}
public InitialContext getContext() throws NamingException{
Hashtable<String, String> p = new Hashtable<String, String>();
p.put(Context.URL_PKG_PREFIXES, "org.jboss.ejb.client.naming");
InitialContext ctx;
ctx = new InitialContext(p);
return ctx;
}
/**
* ejb接口获取
* @return
*/
public ManageBeanRemote remote(){
ManageBeanRemote remote = null;
try {
remote = (ManageBeanRemote) getContext().lookup(pjName+"ManageBean!login.ManageBeanRemote");
} catch (NamingException e) {
e.printStackTrace();
}
return remote;
}
/**
*
* 登入验证。。。structs用get和set方法获取账号密码
* @return
*/
public String validate_login()
{
System.out.println("username: "+username+" Password:"+password);
List<Manage>ok=new ArrayList<Manage>();
ok=remote().getqualificationParts(username,password);//调用ejb方法
if(ok.size()>0)
{
message="登入成功";
success=true;
}
else
{
message="账号或密码错误";
success=false;
}
return SUCCESS;
}
/*省略username,password,success,message的get和set方法,记得一定要写啊,不然不能获取前台数据和数据返回。我们只需要调用get和set就行了。具体的获取和返回structs2帮我我封装好了*/
}
说明:
return SUCCESS:
public static final java.lang.String SUCCESS = "success";
public static final java.lang.String NONE = "none";
public static final java.lang.String ERROR = "error";
public static final java.lang.String INPUT = "input";
public static final java.lang.String LOGIN = "login";
可以再structs.xml进行相应响应
如:
<package name="com.jvortex.j2eeblog.struts" namespace="/" extends="struts-default">
<action name="checkLogin" class="managerAction" method="checkLogin">
<result name="success">/success.jsp</result>
<result name="input">/index.jsp</result>
</action>
</package>
就可以根据返回的类型跳转不一样的页面
上面的ejb调用没做详细介绍了,详情请参考
http://hm4123660.iteye.com/admin/blogs/2038789
这里的return当为上面的值时,会返回所以定义的参数。
如果我们返回List<Manager>lists时,就return "lists";
完成上面这些,我们的登入也就完成了,试试结果:
我们的账号密码是admin,admin
好的我们的登入基本完成了。
我们可以查看火狐,看看前后台的数据是怎样的