📄 abstractlogicaction.java
字号:
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 + -