Dorado 5 : c.Mapping技术实现登录页面 (T1B)

本节利用dorado自带的页面流技术实现登陆控制。

添加视图模型对象

与上节《Servlet技术实现》相关小节相同。

添加dataset对象

与上节《Servlet技术实现》相关小节相同。

添加AutoForm

与上节《Servlet技术实现》相关小节相同。

添加label和button

与上节《Servlet技术实现》相关小节相同。

AutoForm引入label和button

与上节《Servlet技术实现》相关小节相同。

添加RequestCommand对象

增加一个RequestCommand(cmdLogin),设置path属性为logincontroller.login.d,表示该Command将用户登陆信息发送到logincontroller.login.d (该Controller将在下一节中定义)中作验证。如下图:

图表 4 16
在Studio的Login视图模型中选择编辑界面下方的标签页Events Inspector切换到事件视图,并选择cmdLogin对象,并选择右侧的事件列表中的beforeExecute事件:

图表 4 17
双击打开事件编辑器,输入如下的代码:

var id = dsLogin.getValue("id"); 
var pwd = dsLogin.getValue("pwd"); 
command.parameters().setValue("id",id); 
command.parameters().setValue("pwd",pwd);

表示从dsLogin中取出用户名id和密码pwd放到cmdLogin的parameters中。
Login视图模型中选择编辑界面下方的标签页Properties Inspector切换到属性视图,并选择cmdLogin对象,展开该节点找到Frame的target属性,设置为"_self":

图表 4 18
为了单击按钮时可以执行这个命令,我们将btnLogin按钮的command属性设置为cmdLogin。这样按钮被单击时,按钮会自动地执行cmdLogin的命令,并执行beforeExecute方法实现参数赋值操作,并最终会将登陆信息发送到logincontroller.login.d中作校验,下一步我们就是要在服务器定义一个Controller,用来实现登陆验证。

添加logincontroller

在Studio环境下,刷新工程,并在Mapping节点下新增Mapping文件:

图表 4 19
命名为hr,并确定:

图表 4 20
打开新建的mapping文件hr:

图表 4 21
在其中的controllers中添加controller节点并命名为logincontroller。选中新增的logincontroller节点,并新增action,并命名为login:

图表 4 22
在login节点下新增两个forward,name分别为success,failure:

图表 4 23
设置success的forward属性为"/main.jsp",表示登陆成功后将跳转到main.jsp。

图表 4 24
设置failure的forward属性为"/login.jsp",表示登陆失败后跳转到login.jsp。

图表 4 25
利用dorado studio选择source的hr目录,打开右键菜单,并选择new菜单目录中的class选项,打开如下的向导视图:

图表 4 26
选择其中的第三种Access Controller Class,并选择OK按钮,进入下一步向导图:

图表 4 27
设定Class Name为LoginController,保持Package和其他属性不变,并单击OK按钮。关闭向导窗口。得到LoginController.java的代码:

package hr;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.bstek.dorado.action.Action;
import com.bstek.dorado.action.impl.AbstractAccessController;
import com.bstek.dorado.utils.*;

/**
 * LoginController
 */
public class LoginController extends AbstractAccessController {
	public boolean login(Action action, HttpServletRequest request,
			HttpServletResponse httpServletResponse) {
		String user = request.getParameter("user");
		String password = request.getParameter("password");
		if (StringHelper.isNotEmpty(user)) {
			if (!"dorado".equals(password)) {
				action.addMessage("Invalid password!");
				action.addMessage("Please check your password and try again!");
				return false;
			}
		} else {
			action.addMessage("User Name Missed!");
			action.addMessage("Please enter the user name and try again!");
			return false;
		}
		return true;
	}

	public void logout(Action action, HttpServletRequest request,
			HttpServletResponse httpServletResponse) {
	}

}

将其中的代码"user"修改为"id","password"修改为"pwd","dorado"修改为"admin"。
最终代码为:

package hr;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.bstek.dorado.action.Action;
import com.bstek.dorado.action.impl.AbstractAccessController;
import com.bstek.dorado.utils.*;

/**
 * LoginController
 */
public class LoginController extends AbstractAccessController {
	public boolean login(Action action, HttpServletRequest request,
			HttpServletResponse httpServletResponse) {
		String user = request.getParameter("id");
		String password = request.getParameter("pwd");
		if (StringHelper.isNotEmpty(user)) {
			if (!"admin".equals(password)) {
				action.addMessage("Invalid password!");
				action.addMessage("Please check your password and try again!");
				return false;
			}
		} else {
			action.addMessage("User Name Missed!");
			action.addMessage("Please enter the user name and try again!");
			return false;
		}
		return true;
	}

	public void logout(Action action, HttpServletRequest request,
			HttpServletResponse httpServletResponse) {
	}

}

回到mapping配置文件中设定logincontroller的clazz属性为"hr. LoginController":

图表 4 28
最后将mapping文件hr加入到Mapping文件global的申明中,打开Mapping文件global:

图表 4 29
在units节点下新增节点,并设置name属性为hr,表示将我们自定义的Mapping文件加入到dorado的mapping运行环境中。
保存所有修改。

创建JSP

利用视图模型的JSP创建向导,在WebRoot根目录下创建login.jsp,代码如下:

<%@ page contentType="text/html; charset=UTF-8" %> 
<%@ taglib uri="http://www.bstek.com/dorado" prefix="d" %> 
 <html> 
 <head> 
 <title></title> 
 </head> 
 <body> 
 <d:View config="hr.Login"> 
 <d:Layout type="vflow" height="100%"> 
 <d:Pane align="center"> 
 <d:AutoForm id="frmLogin" /> 
 </d:Pane> 
 </d:Layout> 
 </d:View> 
 </body> 
 </html>

运行测试

在MyEclipse环境中,刷新src,home和WebRoot目录,读取dorado studio中新创建的login.jsp文件。
启动集成的Tomcat5服务。在浏览器中输入:
http://localhost:8080/doradosample/login.jsp
在以下的界面中输入用户名admin,并作登陆测试:

图表 4 30
(Mapping实现完毕)