⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 abstractformcontroller.java

📁 spring+acegi编写的网上书城
💻 JAVA
字号:
package net.livebookstore.web.core;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import net.livebookstore.util.HttpUtil;

import org.springframework.web.servlet.ModelAndView;

/**
 * AbstractFormController that binds object to http form.
 * 
 * @author Xuefeng
 */
public abstract class AbstractFormController extends AbstractBaseController {

    private Class clazz;

    public AbstractFormController() {
        this.clazz = getEmptyFormObject().getClass();
    }

    public final ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
        String method = request.getMethod();
        if(method.equals("GET")) {
            Map model = new HashMap();
            model.put("form", getEmptyFormObject());
            return new ModelAndView(getFormView(request), model);
        }
        else if(method.equals("POST")) {
            Object form = HttpUtil.createFormBean(request, clazz);
            try {
                List<String> errors = new ArrayList<String>(3);
                validate(errors, form);
                if(errors.isEmpty()) {
                    doSubmit(form);
                    response.sendRedirect(getSuccessView(request));
                }
                else {
                    Map model = new HashMap();
                    model.put("form", form);
                    model.put("errors", errors);
                    return new ModelAndView(getFormView(request), model);
                }
            }
            catch(Exception e) {
                // display error:
                String error = convertException(e);
                Map model = new HashMap();
                model.put("error", error==null ? "未知错误" : error);
                model.put("form", form);
                return new ModelAndView(getFormView(request), model);
            }
            return null;
        }
        // not GET or POST:
        response.sendError(HttpServletResponse.SC_METHOD_NOT_ALLOWED);
        return null;
    }

    /**
     * Return form view, e.g.: "register-form.html".
     * 
     * @return The form view.
     */
    protected abstract String getFormView(HttpServletRequest request);

    /**
     * Return a success view after submitting a form successfully.
     * 
     * @return A success view, e.g.: "register-success.html".
     */
    protected abstract String getSuccessView(HttpServletRequest request);

    /**
     * Create an empty form-object to initalize the form.
     * 
     * @return The empty or default form object.
     */
    protected abstract Object getEmptyFormObject();

    /**
     * Do submit action.
     * 
     * @param obj The form object that has binded form data.
     */
    protected abstract void doSubmit(Object form);

    /**
     * Convert exception to String message.
     * 
     * @param e
     * @return
     */
    protected abstract String convertException(Exception e);

    /**
     * Validate form object.
     * 
     * @param errors
     * @param form
     */
    protected abstract void validate(List<String> errors, Object form);

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -