2015-01-28 2 views
0

Я реализую Front Controller, который представляет собой сервлет и шаблон командного шаблона. У меня проблема: после успешного POST я перенаправляю пользователя, чтобы просмотреть добавление к запросу одного параметра. и после обработки запроса через контроллер у меня есть имя параметра, но не значение.POST-REDIRECT-GET значения исчезающих параметров

Например, если controller должен перейти на следующий путь, чтобы перейти к тому, что было возвращено Command:

controller?command=viewFaculty&name=Автоматика и приборостроения 

Путь результат будет что-то вроде:

controller?command=viewFaculty&name= 

Мой контроллер:

public class FrontController extends HttpServlet { 
    private static final long serialVersionUID = 1L; 

    private static final Logger LOG = Logger.getLogger(FrontController.class); 

    protected void doGet(HttpServletRequest request, 
      HttpServletResponse response) throws ServletException, IOException { 
     process(request, response, ActionType.FORWARD); 
    } 

    protected void doPost(HttpServletRequest request, 
      HttpServletResponse response) throws ServletException, IOException { 
     process(request, response, ActionType.REDIRECT); 
    } 

    private void process(HttpServletRequest request, 
      HttpServletResponse response, ActionType actionType) 
      throws IOException, ServletException { 

     LOG.debug("Start processing in Controller"); 

     // extract command name from the request 
     String commandName = request.getParameter("command"); 
     LOG.trace("Request parameter: 'command' = " + commandName); 

     // obtain command object by its name 
     Command command = CommandManager.get(commandName); 
     LOG.trace("Obtained 'command' = " + command); 

     Map<String, String[]> parameterMap = request.getParameterMap(); 
     for (Iterator<Entry<String, String[]>> iterator = parameterMap 
       .entrySet().iterator(); iterator.hasNext();) { 
      Entry<String, String[]> entry = iterator.next(); 
      System.out.println(entry.getKey() + "=" + Arrays.toString(entry.getValue())); 
     } 

     // execute command and get forward address 
     String path = command.execute(request, response, actionType); 

     if (path == null) { 
      LOG.trace("Redirect to address = " + path); 
      LOG.debug("Controller proccessing finished"); 
      response.sendRedirect(Path.WELCOME_PAGE); 
     } else { 
      if (actionType == ActionType.FORWARD) { 
       LOG.trace("Forward to address = " + path); 
       LOG.debug("Controller proccessing finished"); 
       RequestDispatcher disp = request.getRequestDispatcher(path); 
       disp.forward(request, response); 
      } else if (actionType == ActionType.REDIRECT) { 
       LOG.trace("Redirect to address = " + path); 
       LOG.debug("Controller proccessing finished"); 
       response.sendRedirect(path); 
      } 
     } 
    } 
} 

Выход для parameterMap итераций:

command=[viewFaculty] 
name=[] 

Я посмотрел на те же проблемы, и ответить на них с помощью response.encodeRedirectUrl(String) - это не помогло, и этот метод не рекомендуется. Я использую Tomcat 7, сервлеты, jsp, log4j и mysql.

+1

«Автоматика и приборостроения» не является ASCII. Вы должны использовать кодировку URL. – xehpuk

+0

@xehpuk yeap, это он – marknorkin

ответ

0

Как @xehpuk указал, что мне нужно кодировать символы, отличные от ASCII, вот почему я изучил эту проблему. Поэтому в ответной заявке я должен сделать следующее:

return Path.REDIRECT_TO_FACULTY + URLEncoder.encode(facultyName, "UTF-8");