|
楼主 |
发表于 2006-10-15 09:45
|
显示全部楼层
对Struts的ActionForm的使用和对Action的使用类似,先写了个继承自ActionForm的类BaseActionForm,作为其它actionform的基类。
public class BaseActionForm extends ActionForm {
/* Public Methods */
public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) {
ActionErrors actionErrors = null;
ArrayList errorList = new ArrayList();
doValidate(mapping, request, errorList);
request.setAttribute("errors", errorList);
if (!errorList.isEmpty()) {
actionErrors = new ActionErrors();
actionErrors.add(ActionErrors.GLOBAL_ERROR, new ActionError("global.error"));
}
return actionErrors;
}
public void doValidate(ActionMapping mapping, HttpServletRequest request, List errors) {
}
/* Protected Methods */
protected void addErrorIfStringEmpty(List errors, String message, String value) {
if (value == null || value.trim().length() < 1) {
errors.add(message);
}
}
}
为了需要安全检查的验证,还特别写了个SecureBaseAction的类。
- public abstract class SecureBaseAction extends BaseAction {
- public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request,
- HttpServletResponse response) throws Exception {
- AccountActionForm acctForm = (AccountActionForm) request.getSession().getAttribute("accountForm");
- if (acctForm == null || acctForm.getAccount() == null) {
- String url = request.getServletPath();
- String query = request.getQueryString();
- if (query != null) {
- request.setAttribute("signonForwardAction", url + "?" + query);
- } else {
- request.setAttribute("signonForwardAction", url);
- }
- return mapping.findForward("global-signon");
- } else {
- return doExecute(mapping, form, request, response);
- }
- }
- protected abstract ActionForward doExecute(ActionMapping mapping, ActionForm form, HttpServletRequest request,
- HttpServletResponse response) throws Exception;
- }
复制代码
因为它的身份验证是单一(即没有多种身份多种权限),直接在session中检查是否有帐户。
在有比较多字段需要检查的时候,就在doValidate方法内进行验证(在有些地方,作者选择了直接覆盖execute方法),其它一般都是看看是否为空,所以用了一个通用的方法 addErrorIfStringEmpty(这个方法在BaseActionForm中定义)。 |
|