docs: static protected Map<String, String> extractTemplateParameters(String viewName){
  		int i1 = -1;
  		int i2 = -1;
  		int i3 = -1;
  		int i4 = -1;
  		i1 = viewName.indexOf(LEFT_BRACKET);
  		if (i1 != -1){
  			i2 = viewName.indexOf(LEFT_BRACKET, i1+1);
  		}
  		i4 = viewName.lastIndexOf(RIGHT_BRACKET);
  		if (i4 != -1){
  			i3 = viewName.lastIndexOf(RIGHT_BRACKET, i4-1);
  		}
  		
  		if ((i1 == -1 || i4 == -1)		// no starting or ending 
  				|| (i2 == -1 || i3 == -1) 			// not found
  				|| (i2 > i3)){			// not matching
  			return null;		// no valid template descriptor
  		}
  		
  		//////// the format is guaranteed to be valid after this point
  		
  		Map<String, String> parameters = new HashMap<String, String>();
  
  		if (i1 > 0){
  			String prefix = viewName.substring(0, i1);
  			parameters.put(StdrUtil.URL_PREFIX_PARAMETER, prefix);
  		}
  		if (i4 < viewName.length() - 1){
  			String postfix = viewName.substring(i4 + 1);
  			parameters.put(StdrUtil.URL_POSTFIX_PARAMETER, postfix);
  		}
  		
  		StrTokenizer tokenizer = new StrTokenizer(viewName.substring(i2+1, i3), 
  				StrMatcher.charSetMatcher(',', '='), 
  				StrMatcher.singleQuoteMatcher());
  		tokenizer.setEmptyTokenAsNull(true);
  		while(tokenizer.hasNext()){
  			String name = tokenizer.next();
  			String value = null;
  			try{
  				value = tokenizer.next();
  			}catch(NoSuchElementException e){
  				// do nothing, value should be null anyway.
  			}
  			parameters.put(name, value);
  		}
  		return parameters;
  	}