package edu.sjtu.infosec.ismp.manager.EM.comm; import java.io.UnsupportedEncodingException; import java.sql.Timestamp; import java.util.Date; import java.util.Enumeration; import java.util.HashMap; import java.util.Map; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; import org.apache.commons.beanutils.ConvertUtils; import org.apache.commons.beanutils.converters.IntegerConverter; import org.apache.commons.beanutils.converters.LongConverter; import org.apache.commons.lang.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.struts.Globals; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionMapping; import org.apache.struts.action.ActionMessages; import org.apache.struts.actions.DispatchAction; import org.springframework.context.ApplicationContext; import org.springframework.web.context.support.WebApplicationContextUtils; import edu.sjtu.infosec.ismp.manager.EM.util.ConvertUtil; import edu.sjtu.infosec.ismp.manager.EM.util.CurrencyConverter; import edu.sjtu.infosec.ismp.manager.EM.util.DateConverter; import edu.sjtu.infosec.ismp.manager.EM.util.SqlTimestampConverter; /** * Action基类. * * @version 1.0 11 May 2009 * @author zhou chenye */ public class BaseAction extends DispatchAction{ /** * 日志 */ protected final Log log = LogFactory.getLog(getClass()); /** * defaultLong */ private static Long defaultLong = null; static { ConvertUtils.register(new CurrencyConverter(), Double.class); ConvertUtils.register(new DateConverter(), Date.class); ConvertUtils.register(new DateConverter(), String.class); ConvertUtils.register(new SqlTimestampConverter(null), Timestamp.class); ConvertUtils.register(new LongConverter(defaultLong), Long.class); ConvertUtils.register(new IntegerConverter(defaultLong), Integer.class); } /** * Convenience method to get Spring-initialized beans * * @param name * Spring bean * @return Object bean from ApplicationContext */ public Object getBean(String name) { ApplicationContext ctx = WebApplicationContextUtils .getRequiredWebApplicationContext(servlet.getServletContext()); return ctx.getBean(name); } /** * @see edu.sjtu.infosec.ismp.manager.util.assessment.ConvertUtil#convert(java.lang.Object) * @param o * BO or Form * @throws Exception * Exception * @return Object * Object */ protected Object convert(Object o) throws Exception { return ConvertUtil.convert(o); } /** * @see edu.sjtu.infosec.ismp.manager.util.assessment.ConvertUtil#convertLists(java.lang.Object) * * @param o * Object * @throws Exception * Exception * @return Object * Object */ protected Object convertLists(Object o) throws Exception { return ConvertUtil.convertLists(o); } /** * 获取查询参数 * @param request * HttpServletRequest * @return 查询参数Map * @throws UnsupportedEncodingException * UnsupportedEncodingException */ public Map getParamMap(HttpServletRequest request) throws UnsupportedEncodingException { Map paramMap = new HashMap(); Enumeration paramEnum = request.getParameterNames(); while(paramEnum.hasMoreElements()) { //String encoding = "ISO-8859-1"; String paramName = (String) paramEnum.nextElement(); System.out.println(paramName); String paramValue = request.getParameter(paramName); if(paramValue != null && !"".equals(paramValue.trim())) { //paramValue = new String(paramValue.getBytes(encoding), "utf-8"); System.out.println(paramValue); paramMap.put(paramName, paramValue); request.setAttribute(paramName, paramValue); } } return paramMap; } /** * Convenience method to initialize messages in a subclass. * * @param request * the current request * @return the populated (or empty) messages */ public ActionMessages getMessages(HttpServletRequest request) { ActionMessages messages = null; HttpSession session = request.getSession(); if (request.getAttribute(Globals.MESSAGE_KEY) != null) { messages = (ActionMessages) request .getAttribute(Globals.MESSAGE_KEY); saveMessages(request, messages); } else if (session.getAttribute(Globals.MESSAGE_KEY) != null) { messages = (ActionMessages) session .getAttribute(Globals.MESSAGE_KEY); saveMessages(request, messages); session.removeAttribute(Globals.MESSAGE_KEY); } else { messages = new ActionMessages(); } return messages; } /** * Gets the method name based on the mapping passed to it * @param request * the current request * @param mapping * the current mapping * @return actionMethod */ private String getActionMethodWithMapping(HttpServletRequest request, ActionMapping mapping) { return getActionMethod(request, mapping.getParameter()); } /** * Gets the method name based on the prepender passed to it. * @param request * the current request * @param prepend * the method prepend * @return actionMethod */ protected String getActionMethod(HttpServletRequest request, String prepend) { String name = null; // for backwards compatibility, try with no prepend first name = request.getParameter(prepend); if (name != null) { // trim any whitespace around - this might happen on buttons name = name.trim(); // lowercase first letter return name.replace(name.charAt(0), Character.toLowerCase(name .charAt(0))); } Enumeration e = request.getParameterNames(); while (e.hasMoreElements()) { String currentName = (String) e.nextElement(); if (currentName.startsWith(prepend + ".")) { if (log.isDebugEnabled()) { log.debug("calling method: " + currentName); } String[] parameterMethodNameAndArgs = StringUtils.split( currentName, "."); name = parameterMethodNameAndArgs[1]; break; } } return name; } /** * Convenience method for getting an action form base on it's mapped scope. * * @param mapping * The ActionMapping used to select this instance * @param request * The HTTP request we are processing * @return ActionForm the form from the specifies scope, or null if nothing * found */ protected ActionForm getActionForm(ActionMapping mapping, HttpServletRequest request) { ActionForm actionForm = null; // Remove the obsolete form bean if (mapping.getAttribute() != null) { if ("request".equals(mapping.getScope())) { actionForm = (ActionForm) request.getAttribute(mapping .getAttribute()); } else { HttpSession session = request.getSession(); actionForm = (ActionForm) session.getAttribute(mapping .getAttribute()); } } return actionForm; } /** * Convenience method to get the Configuration HashMap from the servlet * context. * * @return the user's populated form from the session */ public Map getConfiguration() { Map config = (HashMap) getServlet().getServletContext().getAttribute( Constants.CONFIG); // so unit tests don't puke when nothing's been set if (config == null) { return new HashMap(); } return config; } /** * Convenience method for removing the obsolete form bean. * * @param mapping * The ActionMapping used to select this instance * @param request * The HTTP request we are processing */ protected void removeFormBean(ActionMapping mapping, HttpServletRequest request) { // Remove the obsolete form bean if (mapping.getAttribute() != null) { if ("request".equals(mapping.getScope())) { request.removeAttribute(mapping.getAttribute()); } else { HttpSession session = request.getSession(); session.removeAttribute(mapping.getAttribute()); } } } /** * Convenience method to update a formBean in it's scope * * @param mapping * The ActionMapping used to select this instance * @param request * The HTTP request we are processing * @param form * The ActionForm */ protected void updateFormBean(ActionMapping mapping, HttpServletRequest request, ActionForm form) { // Remove the obsolete form bean if (mapping.getAttribute() != null) { if ("request".equals(mapping.getScope())) { request.setAttribute(mapping.getAttribute(), form); } else { HttpSession session = request.getSession(); session.setAttribute(mapping.getAttribute(), form); } } } /** * map convert to xml * * @param object * map object * @return String xml */ // protected String map2xml(Object object){ // XStream xstream=new XStream(new DomDriver()); // return xstream.toXML(object); // } // // /** // * xml convert to map // * // * @param xml // * String xml // * @return Object map // */ // public Object xml2map(String xml){ // XStream xstream=new XStream(new DomDriver()); // return xstream.fromXML(xml); // } }