Quand j'ai ajouté le code suivant à mon projet
Form<User> filledForm2 = userSignupForm.bindFromRequest();
Il a cessé de fonctionner en affichant un message d'erreur indiquant:
Execution exception
[IllegalStateException: JSR-303 validated property 'Password' does not have a corresponding accessor for data binding - check your DataBinder's configuration (bean property versus direct field access)]
Ma classe User
était comme ça:
class User{
String username;
String Password;
}
Maintenant, comment vérifier/modifier la configuration de DataBinder dans Java Play Framework?
En fait, cela ne devrait pas se produire, Play générant automatiquement des accesseurs et des setters, voir le commentaire de Guillaume .
Par conséquent, il est possible que votre IDE soit à l'origine de problèmes, par exemple. Le commentaire de Guillaume sur Eclipse. Ou que votre cache sbt est corrompu et nécessite un nettoyage, ce que vous pouvez faire avec play clean-all
( lisez-le ici )
Soit dit en passant , le fait de changer votre attribut Password
en password
peut avoir provoqué la régénération du cache et par conséquent corrigé le problème.
Mise à jour:
Pour les versions plus récentes de Play qui utilisent activator
, il semble que les équivalents actuels soient les suivants:
activator clean
et activator clean-files
Mon environnement est Mac OS X 10.9.5 et exécute CentOS 7 avec Vagrant. Sur CentOS, le même problème s'est produit, mais pas sur Mac OS. La version de Play Framework est 2.3.8.
La commnad ci-dessous n'a pas fonctionné dans mon cas:
activator clean
activator clean-files
Bien que cela soit si étrange, je devais définir avec précision le getter et le setter pour que Play Framework sur CentOS7 fonctionne comme suit:
@Entity
public class Message extends Model{
@Id
public long id;
@Constraints.Required
public String name;
//Add getter and setter to work successfully...
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
J'ai résolu ce problème en utilisant activator clean && activator clean-files
avant de faire activator dist