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

📄 abstractlogicaction.java

📁 这是一个用java三层框架做的ISS学员管理系统
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
package com.isoftstone.isscrmweb.web.struts;

import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionForward;
import org.pontifex.util.StringUtil;
import org.pontifex.web.mapping.Context;
import org.pontifex.web.mapping.LoginUser;

import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import java.util.*;
import java.lang.reflect.Field;
import java.text.SimpleDateFormat;
import java.text.ParseException;



/**
 * Created by IntelliJ IDEA.
 * User: Songzou
 * Date: 2007-4-8
 * Time: 11:14:56
 *
 * 逻辑控制器 ,主要解决重复提交问题
 */
public abstract class AbstractLogicAction extends AbstractRightAction {

    /**
     * 重复提交在session中保存的Key
     */
    protected static final String SESSIONID_SAVE_KEY = "sessionID";

    private List mountFlagMethod; // 需要设置重复提交标志的请求列表

    private List checkFlagMethod; // 需要判断重复提交标志的请求列表

    private String repeatPostReturn;  //重复提交后的跳转地址

    /**
     * 重复提交控制器
     */
    protected final ActionForward handRequestLogic(ActionMapping mapping,
                                                   ActionForm form, HttpServletRequest request,
                                                   HttpServletResponse response) throws Exception {
        boolean checkURI = false;
        if (mountFlagMethod != null && mountFlagMethod.contains(method)) {
            log.info("设置重复提交");
            setFlag(request);
            checkURI = false;
        }
        if (checkFlagMethod != null && checkFlagMethod.contains(method)) {
            log.info("检查重复提交");
            checkURI = true;
        }
        if (checkURI) {
            if (!isFlag()) {// 重复提交了
                log.info("重复提交了");

                if (repeatPostReturn == null || repeatPostReturn.equals("")) {
                    throw new Exception("没有设置重复提交路径");
                }
                return viewAndMessage("请不要重复提交!","link('"+repeatPostReturn+"');","返回");
            } else {
                log.info("通过重复提交验证");
            }

        } else {
            log.info("不需要验证重复提交");
        }
        return handRequestDynamic(mapping, form, request, response);
    }

    /**
     * 动态控制器
     *
     * @param mapping
     * @param form
     * @param request
     * @param response
     * @return
     * @throws Exception
     */
    protected abstract ActionForward handRequestDynamic(ActionMapping mapping,
                                                        ActionForm form, HttpServletRequest request,
                                                        HttpServletResponse response) throws Exception;

     /**
       * 将请求对象中提交过来的数据封装在VO对象中(主表) 同时将登录用户信息封装到对象中
       *
       * @param objClass bean的类
       * @param request  请求对象
       * @return object对象
       * @throws IllegalAccessException
       * @throws InstantiationException
       * @throws NoSuchFieldException
       * @throws ClassCastException
       */
      public final Object fillBean(Class objClass, HttpServletRequest request) throws IllegalAccessException, InstantiationException, NoSuchFieldException, ClassCastException {
        Object objInstance = objClass.newInstance();
        if (!(objInstance instanceof LoginUser)) {
          throw new ClassCastException(objClass.getName() + " can't cast to " + LoginUser.class.getName());
        }

        Field field;
        String fieldName;
        String fieldValue;
        int len;
        while (!objClass.getName().equals(LoginUser.class.getName())) {
          len = objClass.getDeclaredFields().length;
          for (int i = 0; i < len; i++) {
            field = objClass.getDeclaredFields()[i];
            fieldName = field.getName();
            fieldValue = request.getParameter(fieldName);
            if (fieldValue != null) {
              setFieldValue(field, objInstance, fieldValue);
            }
          }
          objClass = objClass.getSuperclass();
        }
        addLoginUserInfo(objClass, objInstance, request);
        addContextInfo(objInstance, request);
        return objInstance;
      }

      /**
       * 将请求对象中提交过来的数据封装在VO对象中(主表) 同时将登录用户信息封装到对象中
       *
       * @param objClass bean的类
       * @return object对象
       * @throws IllegalAccessException
       * @throws InstantiationException
       * @throws NoSuchFieldException
       * @throws ClassCastException
       */
      public final Object fillBean(Class objClass) throws IllegalAccessException, InstantiationException, NoSuchFieldException, ClassCastException {
        return fillBean(objClass, this.request);
      }

      /**
       * 将请求对象中提交过来的数据封装在VO对象中(主表) 同时将登录用户信息封装到对象中
       *
       * @param className bean的类名
       * @param request   请求对象
       * @return object对象
       * @throws IllegalAccessException
       * @throws InstantiationException
       * @throws NoSuchFieldException
       * @throws ClassCastException
       * @throws ClassNotFoundException
       */
      public final Object fillBean(String className, HttpServletRequest request) throws IllegalAccessException, NoSuchFieldException, InstantiationException, ClassCastException, ClassNotFoundException {
        return fillBean(Class.forName(className), request);
      }

      /**
       * 将请求对象中提交过来的数据封装在VO对象中(主表) 同时将登录用户信息封装到对象中
       *
       * @param className bean的类名
       * @return object对象
       * @throws IllegalAccessException
       * @throws InstantiationException
       * @throws NoSuchFieldException
       * @throws ClassCastException
       * @throws ClassNotFoundException
       */
      public final Object fillBean(String className) throws IllegalAccessException, NoSuchFieldException, InstantiationException, ClassCastException, ClassNotFoundException {
        return fillBean(Class.forName(className), this.request);
      }

      /**
       * 加入会话中的用户字段信息到对象中
       *
       * @param fillClass  待填充的Class类
       * @param fillObject 待填充的Object对象
       * @param session    会话对象
       * @throws NoSuchFieldException
       * @throws IllegalAccessException
       */
      private void addLoginUserInfo(Class fillClass, Object fillObject, HttpSession session) throws NoSuchFieldException, IllegalAccessException {
        LoginUser loginUser = getLoginUser(session);
        if (loginUser != null) {
          Class loginUserClass = loginUser.getClass(); //会话中存储的登录用户信息
          int len = fillClass.getDeclaredFields().length; //填充对象的属性字段个数
          Field loginUserField;  //登录用户字段属性
          Field fillField;  //填充对象字段属性
          String fillFieldName; //填充对象属性名
          Object fillFieldValue; //填充对象属性值
          for (int i = 0; i < len; i++) {
            fillField = fillClass.getDeclaredFields()[i];
            fillFieldName = fillField.getName();
            loginUserField = loginUserClass.getDeclaredField(fillFieldName);
            loginUserField.setAccessible(true);
            fillFieldValue = loginUserField.get(loginUser);
            fillField.setAccessible(true);
            fillField.set(fillObject, fillFieldValue);
          }
        }
      }

      /**
       * 加入会话中的用户字段信息到对象中
       *
       * @param fillClass  待填充的Class类
       * @param fillObject 待填充的Object对象
       * @param request    请求对象
       * @throws NoSuchFieldException
       * @throws IllegalAccessException
       */
      private void addLoginUserInfo(Class fillClass, Object fillObject, HttpServletRequest request) throws NoSuchFieldException, IllegalAccessException {
        addLoginUserInfo(fillClass, fillObject, getSession(request));
      }

      /**
       * 将应用程序运行中的信息加入到对象中
       *
       * @param fillObject
       * @param request    请求对象
       */
      private void addContextInfo(Object fillObject, HttpServletRequest request) {
        Context context = (Context) fillObject;
        context.setRealPath(getRealPath());
        context.setServerInfo(getServerInfo());
        context.setContextPath(getContextPath(request));
        context.setRequestURI(getRequestURI(request));
        context.setRelativeURI(getRelativeURI(request));
      }

      /**
       * 将请求对象中提交过来的数据封装在List中(从表),同时将登录用户信息封装到对象中
       *
       * @param objClass bean的类
       * @param request  请求对象
       * @return List List对象
       * @throws IllegalAccessException
       * @throws InstantiationException
       * @throws NoSuchFieldException
       * @throws ClassCastException
       */

⌨️ 快捷键说明

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