public void testGetUri() { ActionMapping am = new ActionMapping(); am.setName("view"); am.setNamespace("secure"); am.setParams(Collections.<String, Object>emptyMap()); assertEquals("secureview", mapper.getUriFromActionMapping(am)); }
public void testGetUriParam() { Map<String, Object> param = new HashMap<String, Object>(); param.put("article", "123"); ActionMapping am = new ActionMapping(); am.setName("view"); am.setNamespace("secure"); am.setParams(param); assertEquals("secureview", mapper.getUriFromActionMapping(am)); }
/* * (non-Javadoc) * * @see org.apache.struts2.dispatcher.mapper.ActionMapper#getMapping(javax.servlet.http.HttpServletRequest) */ public ActionMapping getMapping(HttpServletRequest request, ConfigurationManager configManager) { if (!isSlashesInActionNames()) { throw new IllegalStateException( "This action mapper requires the setting 'slashesInActionNames' to be set to 'true'"); } ActionMapping mapping = super.getMapping(request, configManager); if (mapping == null) { return null; } String actionName = mapping.getName(); String id = null; // Only try something if the action name is specified if (actionName != null && actionName.length() > 0) { int lastSlashPos = actionName.lastIndexOf('/'); if (lastSlashPos > -1) { id = actionName.substring(lastSlashPos + 1); } // If a method hasn't been explicitly named, try to guess using ReST-style patterns if (mapping.getMethod() == null) { if (lastSlashPos == actionName.length() - 1) { // Index e.g. foo/ if (isGet(request)) { mapping.setMethod("index"); // Creating a new entry on POST e.g. foo/ } else if (isPost(request)) { mapping.setMethod("create"); } } else if (lastSlashPos > -1) { // Viewing the form to create a new item e.g. foo/new if (isGet(request) && "new".equals(id)) { mapping.setMethod("editNew"); // Viewing an item e.g. foo/1 } else if (isGet(request)) { mapping.setMethod("view"); // Removing an item e.g. foo/1 } else if (isDelete(request)) { mapping.setMethod("remove"); // Updating an item e.g. foo/1 } else if (isPut(request)) { mapping.setMethod("update"); } } if (idParameterName != null && lastSlashPos > -1) { actionName = actionName.substring(0, lastSlashPos); } } if (idParameterName != null && id != null) { if (mapping.getParams() == null) { mapping.setParams(new HashMap<String, Object>()); } mapping.getParams().put(idParameterName, id); } // Try to determine parameters from the url before the action name int actionSlashPos = actionName.lastIndexOf('/', lastSlashPos - 1); if (actionSlashPos > 0 && actionSlashPos < lastSlashPos) { String params = actionName.substring(0, actionSlashPos); HashMap<String, String> parameters = new HashMap<String, String>(); try { StringTokenizer st = new StringTokenizer(params, "/"); boolean isNameTok = true; String paramName = null; String paramValue; while (st.hasMoreTokens()) { if (isNameTok) { paramName = URLDecoder.decode(st.nextToken(), "UTF-8"); isNameTok = false; } else { paramValue = URLDecoder.decode(st.nextToken(), "UTF-8"); if ((paramName != null) && (paramName.length() > 0)) { parameters.put(paramName, paramValue); } isNameTok = true; } } if (parameters.size() > 0) { if (mapping.getParams() == null) { mapping.setParams(new HashMap<String, Object>()); } mapping.getParams().putAll(parameters); } } catch (Exception e) { if (LOG.isWarnEnabled()) { LOG.warn("Unable to determine parameters from the url", e); } } mapping.setName(actionName.substring(actionSlashPos + 1)); } } return mapping; }