Весенняя сессияФорма в Google AppEngine - PullRequest
0 голосов
/ 20 сентября 2009

Мои сеансы в Google Appengine работают в среде разработки, но не при ее развертывании.

В appengine-web.xml у меня для сеансов установлено значение true.

Я что-то здесь упускаю? Мне пришлось переопределить initBinder в моем контроллере, чтобы он работал в appengine, потому что Spring пытается «получить доступ к загрузчику системных классов»

Может быть, я тоже должен что-то сделать для своей проблемы, но я не знаю, что это такое.

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

package com.springtutorial.controller;


import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.beans.propertyeditors.StringTrimmerEditor;
import org.springframework.validation.BindException;
import org.springframework.web.bind.ServletRequestDataBinder;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.SimpleFormController;

import com.springtutorial.model.Course;

public class GetCourseController extends SimpleFormController {

    private static final String ADD_VIDEO_TO_CURRENT_LEARNING_ACTIVITY = "video";
    private static final String NEW_REQUEST = "";
    private static final String ADD_LEARNING_ACTIVITY = "add learning activity";
    private String currentRequest;
    private int activityNumber;

    GetCourseController(){
        setCommandClass(Course.class);
        setCommandName("course");
        setSessionForm(true);
    }

    @Override
    protected ModelAndView showForm(HttpServletRequest request,
            HttpServletResponse response, BindException errors)
            throws Exception {
        if (ADD_LEARNING_ACTIVITY.equals(currentRequest)){
            request.setAttribute("request","add learning activity");
            request.setAttribute("activityNumber",activityNumber);
            activityNumber++;
        } else if (ADD_VIDEO_TO_CURRENT_LEARNING_ACTIVITY.equals(currentRequest)){

        }
        else {
            request.setAttribute("request","new");
        }
        return super.showForm(request, response, errors);
    }
    @Override
    protected boolean isFormChangeRequest(HttpServletRequest request) {
        String action = request.getParameter("submit");
        if (ADD_LEARNING_ACTIVITY.equals(action)){
            currentRequest = ADD_LEARNING_ACTIVITY;
            return true;
        } 
        return false;
    }
    @Override
    protected ModelAndView onSubmit(HttpServletRequest request,
            HttpServletResponse response, Object command, BindException errors)
            throws Exception {
        currentRequest=NEW_REQUEST;
        return super.onSubmit(request, response, command, errors);
    }
    @Override
    protected void initBinder(HttpServletRequest request,
            ServletRequestDataBinder binder) throws Exception {
        binder.registerCustomEditor(String.class, new StringTrimmerEditor(false)); 
    }   

1 Ответ

0 голосов
/ 22 сентября 2009

Я заставил это работать, реализовав сериализуемость во всех моих командных классах. Я проверил журналы, и я получил NotSerializableException.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...