Error de validación del formulario del marco de juego -- java campo con forms campo con validation campo con playframework camp Relacionados El problema

Play Framework Form validation error


1
vote

problema

Español

¡Actualmente estoy mirando la jugada! Marco para Java, y he encontrado un error bastante curioso:

Tengo un modelo con los siguientes campos requeridos (no hay otros campos, excepto una ID)

  @Lob @Constraints.Required private String content;  @Constraints.Email @Constraints.Required private String email;  @Constraints.Required private String title;   

Tengo los siguientes métodos en mi controlador:

  public static Result createEntry() {     Form<BlogEntry> filledForm = blogEntryForm.bindFromRequest();     if (filledForm.hasErrors()) {         Logger.debug(filledForm.data().toString());         Logger.debug(filledForm.errors().toString());         return badRequest(newentry.render(filledForm));     }     BlogEntry entry = filledForm.get();     entry.save();     return redirect(routes.BlogController.index()); }  public static Result newEntry() {     return ok(newentry.render(blogEntryForm)); }   

y la vista se ve así:

  @(blogform: Form[BlogEntry]) @import helper._  @main("New Blog Entry") {     @form(routes.BlogController.createEntry()) {          @if(blogform.hasErrors) {             Errors in form         }         <fieldset>             <div>             @inputText(blogform("email"), '_label -> "Email")             </div>             <div>             @inputText(blogform("title"), '_label -> "Title")             </div>             <div>             @inputText(blogform("content"), '_label -> "Content")             </div>             <button type="submit">Submit</button>         </fieldset>     } }   

Ahora, cuando navegue hasta el formulario en mi navegador, e ingrese algunos datos, luego haga clic en "Enviar", me redirigen al formulario, por lo que se llamó la parte $this->createForm(...)3 del código. Así que comencé a registrar la salida de los errores de formulario y validación, y esto salió:

[depuración] Aplicación - {contenido = prueba, title = prueba, correo electrónico=me@example.com}

[depuración] Aplicación - {contenido = [ValidationError (contenido, Error.Requirido, [])], title = [ValidationError (título, error.Required, [])], correo electrónico = [ValidationError (correo electrónico, error. Requerido, [])]}

Los datos están definitivamente allí, y cuando estoy redirigido al formulario después de enviar, los campos todavía están llenos con los datos correctos. ¿Falta algo obvio aquí?

Original en ingles

I'm currently looking at the Play! Framework for Java, and I've run into a pretty curious error:

I've got a model with the following required fields (no other fields except an id)

@Lob @Constraints.Required private String content;  @Constraints.Email @Constraints.Required private String email;  @Constraints.Required private String title; 

I've got the following methods in my Controller:

public static Result createEntry() {     Form<BlogEntry> filledForm = blogEntryForm.bindFromRequest();     if (filledForm.hasErrors()) {         Logger.debug(filledForm.data().toString());         Logger.debug(filledForm.errors().toString());         return badRequest(newentry.render(filledForm));     }     BlogEntry entry = filledForm.get();     entry.save();     return redirect(routes.BlogController.index()); }  public static Result newEntry() {     return ok(newentry.render(blogEntryForm)); } 

And the view looks like this:

@(blogform: Form[BlogEntry]) @import helper._  @main("New Blog Entry") {     @form(routes.BlogController.createEntry()) {          @if(blogform.hasErrors) {             Errors in form         }         <fieldset>             <div>             @inputText(blogform("email"), '_label -> "Email")             </div>             <div>             @inputText(blogform("title"), '_label -> "Title")             </div>             <div>             @inputText(blogform("content"), '_label -> "Content")             </div>             <button type="submit">Submit</button>         </fieldset>     } } 

Now when I navigate to the form in my browser, and enter some data, then click "submit", I get redirected to the form, so the badRequest portion of the code was called. So I started logging the output of both form and validation errors, and this came out:

[debug] application - {content=test, title=test, email=me@example.com}

[debug] application - {content=[ValidationError(content,error.required,[])], title=[ValidationError(title,error.required,[])], email=[ValidationError(email,error.required,[])]}

The data is definitely there, and when I'm redirected to the form after submitting, the fields are still filled with the correct data. Am I missing something obvious here?

           

Lista de respuestas

3
 
vote
vote
La mejor respuesta
 

Destaca esto ahora: la razón era que no tenía resueltos para los campos en mi modelo. De esa manera, la forma no pudo establecer las propiedades y falló en silencio.

 

Figured this out now: The reason was that I had no setters for the fields in my model. That way the form was unable to set the properties and failed silently.

 
 
 
 
0
 
vote

Hola, sé que ha pasado un año desde que lo observaste, pero tengo un poco más de información para cualquier persona que acaba de venir a esto ahora. Al usar 2.4.x y configurar los ebeanos, encontré esta página: Play Mejorer . El potenciador de la reproducción es la magia del código de bytes que permite el uso de campos públicos y acceso directo en el proyecto, pero cuando se construye realmente encapsula los campos.

El potenciador busca todos los campos en las clases de Java que:

  • son públicos

  • son no estáticos

  • no es final

Para cada uno de esos campos, generará un Getter y un setter si ya no existen. Si desea proporcionar un Getter o Setter personalizado para un campo, esto se puede hacer simplemente escribiéndolo, el potenciador de la reproducción simplemente saltará la generación del getter o el setter si ya existe.

En el uso de los EBEAN ORM, el potenciador de la reproducción se enciende de forma predeterminada. ¡Esto es desde el archivo complementos predeterminado.SBT que viene con una reproducción! Aplicación:

  AppConfigService0  

Las opciones son para tener campos públicos y usarlos sin consegurantes y dejar que la reproducción lo modifique debajo del capó o use campos privados y defina sus propios entallones y colonos.

 

Hello I know it has been a year since you've looked at this but I have a little more information for anyone just coming to this now. In using 2.4.x and setting up ebeans I came across this page: Play Enhancer. The play enhancer is byte code magic that allows the use of public fields and direct access in the project but when built actually encapsulates the fields.

The enhancer looks for all fields on Java classes that:

  • are public

  • are non static

  • are non final

For each of those fields, it will generate a getter and a setter if they donxe2x80x99t already exist. If you wish to provide a custom getter or setter for a field, this can be done by just writing it, the Play enhancer will simply skip the generation of the getter or setter if it already exists.

In using the ebeans ORM, the Play Enhancer gets turned on by default. This is from the default plugins.sbt file that comes with a Play! application:

// Play enhancer - this automatically generates getters/setters for public fields // and rewrites accessors of these fields to use the getters/setters. Remove this // plugin if you prefer not to have this feature, or disable on a per project // basis using disablePlugins(PlayEnhancer) in your build.sbt addSbtPlugin("com.typesafe.sbt" % "sbt-play-enhancer" % "1.1.0")  // Play Ebean support, to enable, uncomment this line, and enable in your build.sbt using // enablePlugins(SbtEbean). Note, uncommenting this line will automatically bring in // Play enhancer, regardless of whether the line above is commented out or not. addSbtPlugin("com.typesafe.sbt" % "sbt-play-ebean" % "1.0.0") 

The options are to have public fields and use them without getters and let play alter it under the hood or use private fields and define your own getters and setters.

 
 

Relacionados problema

0  Error jsroutes.controllers no está definido cuando usa JavascripToutes Play Framework 2.3  ( Error jsroutes controllers is undefined when use javascriptroutes play framework ) 
Tengo respuesta de javascriptroutes como esta: http://pastebin.com/7rsa5wzj En mi plantilla, utilicé: raiserror9 Cuando usé esto, recibí un mensaje ...

0  Autenticando en juego sin usar rutas  ( Authenticating in play without using routes ) 
He seguido este tutorial para la autenticación y funciona: http://www.playframework.com/documentation/2.2.x/javaguide4 < / a> Pero me preguntaba si había...

11  Buena manera, forma idiomática de refactar la lógica de negocios de los controladores  ( Good idiomatic way to refactor out business logic from controllers ) 
Soy nuevo en Scala y Jugar; Y escribí un controlador "Hacer todo" que contiene lógica de negocios y presentación. Quiero refactorizar la lógica de negocios fu...

6  ¿Biblioteca para integrar el inicio de sesión de Facebook con el marco de juego? [cerrado]  ( Library to integrate facebook login with play framework ) 
cerrado. Esta pregunta no cumple con pautas de desbordamiento de pila . Actualmente no está aceptando respuestas. ...

2  Ejecutar Play Framework Prueba de NetBeans  ( Run play framework test from netbeans ) 
¿Hay alguna manera de iniciar una aplicación de reproducción en el modo de prueba desde NetBeans? Sé cómo iniciar una solicitud de reproducción en modo de eje...

0  Utilizar @before Annotation en Play 1.2.5?  ( Use before annotation in play 1 2 5 ) 
Quiero que se revise la sesión antes de enviar un usuario al inicio de sesión, por lo que cada solicitud de URL se traduce en verificar si Esto es de una sesi...

0  ¿Puedo unir una forma de un modelo de alguna manera de alguna manera?  ( Can i bind a form from a model automatically somehow ) 
Entonces, tengo los siguientes métodos en mi controlador de usuario: def create def onCreate def edit(userId: Int) Crear Muestra un nuevo formulario,...

2  ¿Por qué no puedo anular la plantilla de crud cuando use @ crud?  ( Why am i not able to override crud template when using crud for ) 
Estoy leyendo El tutorial de juego y para especificar cosas un poco Bit. Decidí usar @ crud. Para en lugar de usar el nombre de modelo predeterminado plural...

0  Almacenamiento de valor de sesión en tipo largo  ( Storing session value in long type ) 
Estoy almacenando ID como una cadena en sesión en el marco de juego con Scala. $("#brand div").each(function(e) { $(this).delay(600*e).fadeTo('slow',1) }) ...

1  ¿Es posible llamar a un controlador de otro controlador sin redirigir como medios para aumentar la seguridad de Secure.login ()?  ( Is it possible to call one controller from another controller without redirectin ) 
Estoy usando el módulo de juego seguro y me gustaría configurar la URL 'Flash Param' en el valor del encabezado del árbitro HTTP, si la URL aún no está config...




© 2022 respuesta.top Reservados todos los derechos. Centro de preguntas y respuestas reservados todos los derechos