2014-06-13 4 views
0

Je travaille sur une contrainte vide dans Grails. J'ai addWebsites.gsp comme suit:La contrainte vide dans Grails ne fonctionne pas

<g:form controller="SiteURL" action="websiteAdded"> 
    <label for="siteURL">ADD URL:</label> 
    <g:textField name="siteURL" value="${siteURL?.siteURL}" 
     style="width: 400px;height: 22px;"></g:textField> 
    <br /> 
    <input type="submit" value="Save"> 
</g:form> 

Je veux la contrainte vide sur la textFieldsiteURL. La classe de domaine est SiteURL.groovy:

class SiteURL { 
    String siteURL 
    static constraints = { 
     siteURL blank:false 
    } 
} 

Ma SiteURLController.groovy classe est la suivante:

class SiteURLController { 
    def addWebsites() { } 

    def websiteAdded(){ 

     if(request.method == 'POST') { 
      def u = new SiteURL() 
      u.properties ['siteURL'] 
      if(u.siteURL =="") { 
       u.errors.rejectValue("siteURL", "cmsprofiler.siteurl.empty") 
       return [siteURL:u] 
      } else if(u.save()) { 
       session.siteURL= u 
       redirect(controller: "SiteURL", action: "websiteAdded") 
      } else { 
       return [siteURL:u] 
      } 
     } 
    } 

    def websiteNOTAdded(){ } 
} 

Malgré la contrainte, il ne montre pas l'erreur quand je quitte le champ de texte en blanc et me prend toujours à la websiteAdded voir page. Je ne suis pas capable de comprendre ce qui ne va pas. Je veux que l'erreur soit affichée dans le cas où un utilisateur essaye d'appuyer sur soumettre sans entrer l'URL. Toute aide serait appréciée. Merci

Répondre

1

Vous avez du code qui ressemble à ceci:

def u = new SiteURL() 
u.properties ['siteURL'] 
if(u.siteURL =="") { 
    u.errors.rejectValue("siteURL", "cmsprofiler.siteurl.empty") 
    return [siteURL:u] 
} 

Ce if état ne sera jamais vrai. Vous créez un nouvel objet SiteURL et n'attribuez jamais de valeur à la propriété siteURL, il sera donc null.

Votre code se comporte exactement comme je m'attendais à ce qu'il se comporte.

Il se peut que vous pensiez que u.properties ['siteURL'] fait quelque chose de significatif, mais ce n'est pas le cas. Tout ce que fait est de récupérer la valeur de la propriété siteURL. Vous ne lui attribuez jamais de valeur.

+0

Merci Jeff. Quelle serait la bonne approche? J'ai appliqué la même approche pour un formulaire d'inscription et cela fonctionne très bien, alors j'ai pensé que c'était juste. J'ai débogué cela pendant des heures mais en vain. –

+1

Il n'est pas vraiment possible que vous ayez appliqué cette même approche pour un autre formulaire et cela a fonctionné. Ce code n'attribue jamais aucune valeur aux propriétés de l'instance nouvellement créée. Vous avez probablement l'intention de faire quelque chose comme 'defu = new SiteURL (params)' ou 'defu = new SiteURL()' suivi de 'u.properties = params' ou' u.properties ['siteURL'] = params' ou quelque chose de similaire. Votre code tel qu'il est écrit n'est pas sensé. –

+0

Merci Jeff. Je suis nouveau à Grails. Je ne suis pas sûr de ce que fait chaque ligne. Pouvez-vous expliquer ce que fait la ligne session.siteURL = u et retourner [siteURL: u]. Merci d'avance. :) –

Questions connexes