случайная ошибка CRUD на игровой площадке - PullRequest
1 голос
/ 10 февраля 2012

когда я выполняю приведенное ниже действие контроллера, я получаю сообщение об ошибке в конце этого вопроса. при получении этой ошибки и если я обновляю страницу в браузере, страница представления контроллера отображается без ошибок. Я не уверен, что вызывает эту ошибку при первом запросе действия контроллера Beleow?

/**
     * controller to register new user.
     *  Shows registration screen.
     */
    public static void registration() throws Exception {

        ObjectType type = ObjectType.forClass("models.User");

        Constructor<?> constructor = type.entityClass.getDeclaredConstructor();
        constructor.setAccessible(true);

        Model object = (Model) constructor.newInstance();
        /*System.out.print("type=");
        System.out.println(type);
        System.out.print("object=");
        System.out.println(object);*/
        render(type, object);
    }

---- Трассировка ошибки исключения --------------

23:12:14,229 ERROR ~ 

@69bf92hlc
Internal Server Error (500) for request GET /registration

Template execution error (In {module:crud}/app/views/tags/crud/types.tag around line 3)
Execution error occured in template {module:crud}/app/views/tags/crud/types.tag. Exception raised was NullPointerException : null.

play.exceptions.TemplateExecutionException
    at play.templates.BaseTemplate.throwException(BaseTemplate.java:86)
    at play.templates.GroovyTemplate.internalRender(GroovyTemplate.java:257)
    at play.templates.GroovyTemplate$ExecutableTemplate.invokeTag(GroovyTemplate.java:379)
    at {module:crud}/conf/routes.(line:4)
    at play.templates.GroovyTemplate.internalRender(GroovyTemplate.java:232)
    at play.templates.Template.render(Template.java:26)
    at play.templates.GroovyTemplate.render(GroovyTemplate.java:187)
    at play.mvc.Router.parse(Router.java:162)
    at play.mvc.Router.parse(Router.java:190)
    at play.mvc.Router.parse(Router.java:164)
    at play.mvc.Router.load(Router.java:48)
    at play.mvc.Router.detectChanges(Router.java:219)
    at Invocation.HTTP Request(Play!)
Caused by: java.lang.NullPointerException
    at play.classloading.ApplicationCompiler$2.acceptResult(ApplicationCompiler.java:266)
    at org.eclipse.jdt.internal.compiler.Compiler.compile(Compiler.java:478)
    at play.classloading.ApplicationCompiler.compile(ApplicationCompiler.java:282)
    at play.classloading.ApplicationClassloader.getAllClasses(ApplicationClassloader.java:424)
    at play.classloading.ApplicationClassloader.getAssignableClasses(ApplicationClassloader.java:453)
    at play.classloading.ApplicationClassloader$getAssignableClasses.call(Unknown Source)
    at {module:crud}/app/views/tags/crud/types.tag.(line:3)
    at play.templates.GroovyTemplate.internalRender(GroovyTemplate.java:232)
    ... 11 more

1 Ответ

0 голосов
/ 12 февраля 2012

Я думаю, что причина вашей ошибки в том, что когда вы впервые пытаетесь отобразить форму, объект еще не создан, поэтому Exception raised was NullPointerException : null.

К сожалению, я не знаком с Play 2. * и не планирую запускать до того, как он станет более стабильным, но я думаю, что я понял, что CRUD генерация не включена и не полностью поддерживается , так что вы вероятно, используя код из play1 crud?

Я думаю, что решение в вашем случае состоит в том, чтобы лучше покрыть шаблон New (пробел) / View / Save; просмотр ваших маршрутов также может помочь понять эту проблему.

В любом случае, учитывая, что вы не генерируете неизвестный тип модели, а всегда User, каково реальное преимущество прохождения этого сложного паттерна?

Вы должны сделать что-то вроде

пусто

User user = null
render()

просмотр / редактирование

User user = User.findById(id);

сохранение

public static void save(@Valid User object) {

    if(validation.hasErrors()) {
        params.flash(); // add http parameters to the flash scope
        User user = object;
        render("User/show.html", user);
    }
}
...