OperaMasks2.0开发实例入门之二:用户注册
package org.operamasks.example.registration.dao;
import java.util.List;
import org.operamasks.example.registration.businessobject.User;
public interface UserDAO {
public void addUser(User user);//增加
public void modifyUser(User user);//修改
public void removeUser(String id);//删除
public User getUser(String id);//查找
public List<User> getAllUsers();//查找
public boolean validate(User user);//校验
}
package org.operamasks.example.registration.dao;
import ......
@ManagedBean(name="dao", scope = ManagedBeanScope.SESSION)
public class UserDAOListImpl implements UserDAO {
......
}
package org.operamasks.example.registration.business;
import ......
@ManagedBean(name = "usersManagerService", scope = ManagedBeanScope.SESSION)
public class UsersManagerServiceImpl implements UsersManagerService {
@ManagedProperty("#{dao}")
private UserDAO dao;
public void createUser(User user) {
dao.addUser(user);
}
public ...... //其他业务方法
}
package org.operamasks.example.registration.model.businessobject;
@SuppressWarnings("serial")
public class User implements java.io.Serializable {
private String id; //用户帐号
private String name; //真实姓名
private String password; //密码
private String email; //电子邮件
public User(){
}
.....
}
package org.operamasks.example.registration.business;
import org.operamasks.example.registration.businessobject.User;
//针对个人的业务处理逻辑
public interface UserPersonalService {
public boolean login(String userid, String password);// 登录
public void logout(); // 注销
public boolean isLogined(); // 是否已登录
public User getUser(); // 获得当前用户所代表的商业对象User
}
import ......
@ManagedBean(name = "userPersonalService", scope = ManagedBeanScope.SESSION)
public class UserPersonalServiceImpl implements UserPersonalService {
//数据访问层UserDAO(接口),利用@ManagedPrperty从AOM注入UserDAO的具体实例。
@ManagedProperty("#{dao}")
private UserDAO dao;
@Accessible
private User user; //当前用户的商业对象User的实例,登录后实例化,登出后置空。
@Accessible
private boolean logined; //当前用户的User的实例,登录后实例化,登出后置空。
public boolean login(String userid, String password) {//登录
boolean flag = false;
User user = dao.getUser(userid);
if (user != null) {
if (user.getPassword().equals(password)) {
this.logined = true;
this.user = user;
flag = true;
}
}
return flag;
}
public void logout() {//注销
this.logined = false;
this.user = null;
}
public User getUser() {
return this.user;
}
public boolean isLogined() {//是否登陆
return this.logined;
}
}
import ......
@ManagedBean(scope = ManagedBeanScope.REQUEST)
public class LoginBean {
//利用@Inject,注入UserPersonalService的具体实例。
@Inject(value = "userPersonalService")
private UserPersonalService service;
@Bind private String userid;
@Bind private String password;
@Bind private String message;
//登录,调用业务逻辑完成。
@Action(id = "btnLogin")
public String login() {
String nextView;
boolean success = this.service.login(userid, password);
if (!success) {
this.message = "用户帐号或密码错误!";
nextView = null;
} else {
nextView = "view:userDetail";
}
return nextView;
}
}
package org.operamasks.example.registration.business;
import ......
//针对用户管理的业务处理逻辑
public interface UsersManagerService {
public User findUser(String id); //查询用户
public void createUser(User user); //创建用户
public void removeUser(String userid); //删除用户
public void modifyUser(User user); //修改用户
public boolean validate(User user); //操作之前,调用此方法进行信息校验
public List<User> findAllUsers(); //查询所有用户
}
import ......
@ManagedBean(name = "usersManagerService", scope = ManagedBeanScope.SESSION)
public class UsersManagerServiceImpl implements UsersManagerService {
@ManagedProperty("#{dao}")
private UserDAO dao;
public void createUser(User user) {
dao.addUser(user);
}
public void modifyUser(User user) {
dao.modifyUser(user);
}
public void removeUser(String userid) {
dao.removeUser(userid);
}
public User findUser(String id) {
return dao.getUser(id);
}
public List<User> findAllUsers() {
return dao.getAllUsers();
}
public boolean validate(User user) {
return dao.validate(user);
}
}
<w:form clientValidate="true">
import ......
@ManagedBean(scope = ManagedBeanScope.REQUEST)
public class LoginBean {
//利用@Inject,注入UserPersonalService的具体实例。
@Inject(value = "userPersonalService")
private UserPersonalService service;
@Bind private String userid;
@Bind private String password;
@Bind private String message;
//登录,调用业务逻辑完成。
@Action(id = "btnLogin")
public String login() {
String nextView;
boolean success = this.service.login(userid, password);
if (!success) {
this.message = "用户帐号或密码错误!";
nextView = null;
} else {
nextView = "view:userDetail";
}
return nextView;
}
}
import ......
@ManagedBean(scope = ManagedBeanScope.REQUEST)
public class UserDetailBean {
@Bind
@ManagedProperty("#{userPersonalService.user.id}")
private String userid;
@Bind
@ManagedProperty("#{userPersonalService.user.email}")
private String email;
@Bind
@ManagedProperty("#{userPersonalService.user.name}")
private String name;
}
// 帐号输入框失去焦点事件事件,该事件触发帐号是否已注册的校验。
@ActionListener(id = "userid", event = "onblur", immediate = true)
public void userid_onBlur(ActionEvent event) {
UITextField fieldUserId = (UITextField) event.getComponent();
......
FacesContext ctx = FacesContext.getCurrentInstance();
fieldUserId.processValidators(ctx);
if (fieldUserId.isValid()) {
img.setUrl(IMG_CHECK_RIGHT);
this.imgCheckUser.setUrl(img.getUrl());
}
}
@Inject(value = "usersManagerService")
private UsersManagerService manager;
......
// 帐号是否存在校验的校验器
@Validate(id = "userid", message = "帐号已存在。")
public boolean validateUserId(Object value) {
String uid = value.toString();
User user = manager.findUser(uid);
return user == null ? true : false;
}
public PhaseId getPhaseId()
{ return PhaseId.RESTORE_VIEW;
}
public void beforePhase(PhaseEvent phaseEvent) {}
public final void afterPhase(PhaseEvent phaseEvent) { //这里做访问控制操作}
import ......
@SuppressWarnings("serial")
public class UserAuthorityCheckListener implements PhaseListener {
......
public void afterPhase(PhaseEvent event) {
FacesContext ctx = FacesContext.getCurrentInstance();
String url = ctx.getViewRoot().getViewId();
NavigationHandler nh = ctx.getApplication().getNavigationHandler();
if (!authorityCheckOk(url)) {
nh.handleNavigation(ctx, null, "LoginView");
}
}
......
public PhaseId getPhaseId() {
return PhaseId.RESTORE_VIEW;
}
private boolean authorityCheckOk(String url) {
if (notNeedToCheck(url))
return true;
ExternalContext etx = FacesContext.getCurrentInstance()
.getExternalContext();
Map<String, Object> map = etx.getSessionMap();
if (map != null) {
UserPersonalService service = (UserPersonalService) map
.get("userPersonalService");
if (service != null) {
return service.isLogined();
}
}
return false;
}
private boolean notNeedToCheck(String url) {
boolean flag = false;
for (String page : NOT_NEED_TO_CHECK_PAGE_LIST) {
if (url.indexOf(page) != -1) {
flag = true;
break;
}
}
return flag;
}
}
<phase-listener>
org.operamasks.example.registration.UserAuthorityCheckListener
</phase-listener>
</lifecycle>
<navigation-rule>
<from-view-id>*</from-view-id>
<navigation-case>
<from-outcome>LoginView</from-outcome>
<to-view-id>/login.jsf</to-view-id>
</navigation-case>
</navigation-rule>