web-dev-qa-db-fra.com

Le "champ" validé par Playframework JSR-303 ne dispose pas d'un accesseur correspondant pour la liaison de données.

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?

22
sadaf2605

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

47
a darren

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;
    }
}
1
Ataru

J'ai résolu ce problème en utilisant activator clean && activator clean-files avant de faire activator dist

0
Casey Murray