Valores POST no recibidos por el servidor: marco de reproducción y extjs
Frecuentes
Visto 658 veces
1
Estoy creando un servicio web con playframework 2 y extjs4. Hasta el día de hoy he logrado superar cualquier obstáculo. Pero esto es algo con lo que no puedo lidiar solo. Seguí tutoriales, pero no me ayudó. Bueno, al principio lo hizo. Sé que funcionó, pude agregar algunos valores a la base de datos (mongodb). Dudo que sea importante, pero:
- todo funcionó bien, agregué algunos datos de prueba en db
- Escribí algunos otros métodos en Java.
- solía
db.Category.remove()
en mi colección mongo - el servidor no puede recibir ningún valor del formulario ahora
Tengo un Ext.FormPanel
con 2 campos:
items: [
{
id: 'categoryName',
fieldLabel: 'Category name',
name: 'categoryName',
allowBlank: false
},{
xtype: 'textarea',
id: 'categoryDescription',
fieldLabel: 'Description',
name: 'categoryDescription',
allowBlank: true
}
]
Correspondiente Model
la clase se ve así:
@MongoCollection(name = "Category")
public class CategoryModel{
private String categoryName;
private String categoryDescription;
@JsonProperty("categoryName")
public String getName() {
return categoryName;
}
@JsonProperty("categoryName")
public void setName(String name) {
this.categoryName = name;
}
@JsonProperty("categoryDescription")
public String getDescription() {
return categoryDescription;
}
@JsonProperty("categoryDescription")
public void setDescription(String description) {
this.categoryDescription = description;
}
public String toString(){
ObjectMapper mapper = new ObjectMapper();
String json = null;
try {
json = mapper.writeValueAsString(this);
} catch (JsonGenerationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (JsonMappingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return json;
}
}
Y finalmente, aquí es donde quiero recibir valores:
Form<CategoryModel> categoryForm = form(CategoryModel.class);
System.out.println(categoryForm);
Salida desde la consola Play:
Form(of=class kunto.models.CategoryModel, data={}, value=None, errors={})
Firebug muestra que los valores POST se envían correctamente:
categoryDescription test
categoryName test
Y yo tengo POST
tipo de solicitud en conf/routes definido en el lado del servidor para esta solicitud en particular.
Tengo preguntas 2:
- que hacer para arreglarlo?
- más importante, ¿por qué sucedió?
EDITAR Como sugirió @adis:
Form<CategoryModel> categoryForm = form(CategoryModel.class).bindFromRequest();
System.out.println(categoryForm);
System.out.println(categoryForm.data());
salidas:
Form(of=class kunto.models.CategoryModel, data={categoryName=test, categoryDescription=test}, value=Some({"categoryName":null,"categoryDescription":null}), errors={})
{categoryName=test, categoryDescription=test}
También revisé
CategoryModel categoryModel = form(CategoryModel.class).bindFromRequest().get();
System.out.println(categoryModel);
produce: {"categoryName":null,"categoryDescription":null}
¿Alguien puede explicar esto?
2 Respuestas
1
Como se comentó, debe vincular la solicitud a un modelo mediante:
Form<CategoryModel> categoryForm = form(CategoryModel.class).bindFromRequest();
Esto le permitirá también verificar las propiedades en su modelo si las ha definido, como: @Contraints.Required.
Después del enlace, obtienes el objeto de formulario y get
la instancia del modelo:
CategoryModel newCatModel = categoryForm.get();
Esto debería darle una instancia de su modelo con los datos de su solicitud de publicación. Por lo general, este método se parece a:
Form<Task> taskForm = form(Task.class).bindFromRequest();
if (taskForm.hasErrors()) { // check for constraints
Logger.info("Error:" + taskForm);
return badRequest(views.html.task.create.render(taskForm));
}
// here get the model instance
Task newTask = taskForm.get();
Espero que esto ayude.
contestado el 03 de mayo de 12 a las 20:05
sobre nosotros @Required
: play.lighthouseapp.com/projects/82401-play-20/tickets/313. Probaré tu solución en unos días, ¡gracias por la ayuda! - mayalitar
Los valores solo están vinculados si no hubo errores de validación. Entonces, si el correo electrónico está vacío, obtendrá un error de validación, por lo que no podrá usar el get()
método. Esto no es un error, es solo la forma en que funciona. - leonard punt
Gracias por su ayuda, pero esto no resuelve mi problema, el efecto es el mismo. - mayalitar
No estoy seguro de lo que sucedió, pero el problema desapareció, ¡gracias por su ayuda! - mayalitar
0
Solo una suposición, pero ¿no debería anotar las propiedades en lugar de los captadores?
@JsonProperty("description")
public void setDescription(String description) {
this.categoryDescription = description;
}
debiera ser
@JsonProperty("description")
private String description;
También tiene una discrepancia en su código anterior ... el captador de descripción está vinculado a "categoríaDescripción" mientras que el definidor está vinculado a "descripción"
contestado el 06 de mayo de 12 a las 11:05
Gracias por su respuesta, anotar propiedades en lugar de setters/getters no resolvió mi problema. desciption
la anotación fue un error, lo vi antes en mi código, gracias por notarlo, todavía no era la fuente de mi problema. - mayalitar
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas extjs4 playframework-2.0 or haz tu propia pregunta.
Puedes probar: Formulario categoryForm = form(CategoryModel.class).bindFromRequest(); - adis
@adis gracias a su comentario, puedo ver el progreso: edité mi pregunta con una pequeña actualización: maialithar
¿Podría ser que el método toString() sea incorrecto? Cuando imprime un objeto, Java siempre llama al método toString(), ¿verdad? ¿Puede eliminar su método toString() y, en lugar de imprimir, simplemente depurarlo con eclipse? - adis