📄 breadcrumbsinterceptor.java
字号:
package net.java.workeffort.webapp.support;import java.io.UnsupportedEncodingException;import java.net.URLEncoder;import java.util.Enumeration;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.apache.commons.logging.Log;import org.apache.commons.logging.LogFactory;import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;import org.springframework.web.util.UrlPathHelper;/** * Manages the bread crumbs of the user. * @author Antony Joseph */public class BreadCrumbsInterceptor extends HandlerInterceptorAdapter { protected static final Log logger = LogFactory .getLog(BreadCrumbsInterceptor.class); public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { if (logger.isInfoEnabled()) logger.info("preHandle() invoked"); BreadCrumbs breadCrumbs = null; if (request.getParameter("fromMenu") != null) { // navigating from main menu. clear the bread crumbs breadCrumbs = (BreadCrumbs) request.getSession().getAttribute( WebConstants.BREAD_CRUMBS); breadCrumbs.clear(); // set session attribute for the case where the http session is // being replicated in a cluster request.getSession().setAttribute(WebConstants.BREAD_CRUMBS, breadCrumbs); } String dispatch = request.getParameter("dispatch"); if (logger.isInfoEnabled()) logger.info("dispatch=" + dispatch); if (!hasParentFlow(request) && ("newSearch".equals(dispatch) || "query".equals(dispatch) || request .getParameter("crumbsEnabled") != null)) { Crumb crumb = new Crumb(getKey(request, dispatch), createUrlWithParameters(request, response)); breadCrumbs = (BreadCrumbs) request.getSession().getAttribute( WebConstants.BREAD_CRUMBS); breadCrumbs.put(crumb); // set session attribute for the case where the http session is // being replicated in a cluster request.getSession().setAttribute(WebConstants.BREAD_CRUMBS, breadCrumbs); } return true; } /** * The crumb key. Example: mapping path '/requirmentSearch.do' and suffix is * 'newSearch' then the key is 'requirmentSearch.newSearch.crumb' * @param request The request * @param suffix The suffix * @return */ private String getKey(HttpServletRequest request, String suffix) { UrlPathHelper helper = new UrlPathHelper(); String mappingPath = helper.getLookupPathForRequest(request); if (suffix == null) return mappingPath.substring(1, mappingPath.indexOf(".")) + ".crumb"; else return mappingPath.substring(1, mappingPath.indexOf(".")) + "." + suffix + ".crumb"; } /** * Creates the full url for the bread crumb using the request url and * parameters. The url is encoded. * @param request The request * @param response The response * @return The encoded full url */ private String createUrlWithParameters(HttpServletRequest request, HttpServletResponse response) { StringBuffer sb = request.getRequestURL(); boolean isFirst = true; Enumeration enum = request.getParameterNames(); while (enum.hasMoreElements()) { String name = (String) enum.nextElement(); String values[] = request.getParameterValues(name); String val = null; if (values != null) { for (int i = 0; i < values.length; i++) { addParameter(sb, name, values[i], isFirst); isFirst = false; } } else { addParameter(sb, name, null, isFirst); } isFirst = false; } return (response.encodeURL(sb.toString())); } /** * Adds the name/value pair to the url. The value is encoded. * @param sb String buffer * @param name The parameter name * @param value The value of the parameter * @param isFirst Whether the first parameter */ private void addParameter(StringBuffer sb, String name, String value, boolean isFirst) { if (isFirst) sb.append("?"); else sb.append("&"); sb.append(name); if (value != null) { sb.append("="); try { value = URLEncoder.encode(value, "UTF-8"); } catch (UnsupportedEncodingException e) { throw new RuntimeException(e); } sb.append(value); } } private boolean hasParentFlow(HttpServletRequest request) { if (request.getParameter("parentFlow") == null || request.getParameter("parentFlow").length() == 0) return false; else return true; }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -