2012-11-30 19 views
5

Ben grails çerçeve üzerinde çalışıyorum ama controller.My uygulama üzerinde çalışıyorum gibi "Tek Sayfa Uygulaması" olduğunu. Ben yazı hizmeti böylece yani Kayıt Servisi Ajax çağrısı ile. Yani data-binding.Database kullanarak nakavt kullanarak postgresql olduğunu. Bir e-posta alanına sahip olduğum bir görüntüleme sayfam var. Yinelenen bir e-posta kimliğimi girip kaydetme düğmesine tıkladığımda, bir doğrulama hatası görebiliyorum, yani "E-posta zaten alındı", ancak aynı zamanda benzersiz bir kimlik yazıyor olsam da aynı doğrulama hatası alıyorum. çünkü modalModal.js sayfasındaki hata durumuna geçiyor, bu yüzden bu sorunu nasıl çözemiyorum. Sadece benzersiz bir kimlik girdiğimde ve kaydetme düğmesine tıkladığımda, doğrulama hatası verilmemelidir.Görünüm tarafında bir sunucu tarafı doğrulama hatası görüntüleniyor

_newCostingpage.gsp (my view page) 

    <div id="light" class="white_content" style="color: black;"> 
    <form action="#/cart" method="post"> 
    <input type="hidden" name="url" value="${grailsApplication.config.serverURL}"/> 
    <p><label>first name:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <input name="firstName" 
      class="formElement" data-bind='value: firstName'/></label></p> 
    <p><label>last name:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <input name="lastName" 
       class="formElement" data-bind='value: lastName' /></label></p> 
    <p><label>organisation: <input name="organisation" class="formElement" data- 
       bind='value: organisation' /></label></p> 
<p><label>email:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
     <input name="email" class="formElement" data-bind='value: email' /></label><label 
     id="errorDiv"></label></p> 
<p><label>password:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <input type="password" name="password" 
     class="formElement" data-bind='value: password' /></label></p> 
<p><label style="margin-left: -37px;">confirm password:</label> <input 
     type="password" name="confirmPassword" class="formElement" data-bind='value: 
     confirmPassword' /></p> 
<p><input type="submit" value="register"/></p> 
</form> 
<a href="javascript:void(0)"onclick="document.getElementById('light').style.display='none';document.getElementById('fade').style.display='none';clearBox();">Close</a> 
     </div> 
     <div id="fade" class="black_overlay"></div> 
    </div> 

Domain class :-\ 

    class Registration { 
String firstName 
String lastName 
String organization 
String email 
String password 
String confirmPassword 

static constraints = { 
    firstName(nullable:false) 
    lastName(nullable:true) 
    organization(blank:false) 
    email(nullable:false,email:true,unique:true) 
    password(blank:false) 
    confirmPassword(blank:false) 
       } 
      } 

modalModal.js

var ratPack = $.sammy(function() { 
this.post('#/cart', function() { 
    var firstname = this.params['firstName']; 
    var lastName = this.params['lastName']; 
    var organisation = this.params['organisation']; 
    var email = this.params['email']; 
    var password = this.params['password']; 
    var confirmPassword = this.params['confirmPassword']; 
    var baseurl = this.params['url']; 
    $.ajax({ 
     type : 'POST', 
     url :'http://localhost:9191/guido-rest- 
          resource/api/registration/'+firstname+'/'+lastName+'/'+email, 
     success : function() { 
      alert("success:"); 
     }, 
     error:function(){ 
      $('#errorDiv').text("Email has already been taken"); 
     } 
    }); 
    }); 
     }); 
     $(function() { 
     ratPack.run(); 
     }); 
     function clearBox(){ 
     $('.formElement').val(""); 
     } 


    RegistrationResource.groovy 

     package common.rest.resourcepl 
     import static org.grails.jaxrs.response.Responses.* 
     import javax.ws.rs.Consumes 
     import javax.ws.rs.GET 
     import javax.ws.rs.Produces 
     import javax.ws.rs.Path 
     import javax.ws.rs.PathParam 
     import javax.ws.rs.POST 
     import javax.ws.rs.core.Response 
     import common.servicepl.RegistrationService 
    @Path('/api/registration') 
     class RegistrationResource { 
    @GET 
    @Produces('text/plain') 
    String getRegistrationRepresentation() { 
    'Registration' 
    } 
    def registrationService; 
    @POST 
    @Path('/{firstname}/{lastName}/{email}') 
    Response create(@PathParam('firstname') String firstname, 
       @PathParam('lastName') String lastName, 
       @PathParam('email') String email) { 
       return 
     RegistrationService().createRegistration(firstname,lastName,email); 
    } 
    } 

    RegistrationService.groovy 

     package common.servicepl 
     import common.persistencepl.Registration 
     class RegistrationService { 
       def createRegistration(String firstName,String lastName,String email) { 
     println "Inside Registration Service" 
     def reg = new Registration(); 
     reg.firstName = firstName; 
     reg.lastName = lastName; 
     reg.password = "asdf"; 
     reg.confirmPassword = "asdf"; 
     reg.email = email; 
     reg.organization = "fasdf"; 
     if(reg.save([flush:true])){ 
      return true 
     } 
     else 
     { 
      return false 
     } 
      } 
     } 
+1

Eğer aynı uygulamadan bir hizmet diyoruz, http 'gibi tam yolunu speficy yok: // localhost .. .', Geçerli sayfanıza göreceli olarak belirtin '/ api/registration ...' – BuddhiP

cevap

1

Sunucu yanıt olarak sunucu tarafı hataları içermelidir.

Bu hata iletilerini viewmodal özelliklerinden yapın ve uygun şekilde biçimlendirilmiş html segmentine bağlayın. Eğer aynı uygulamadan bir hizmet çağırdığınızda Ayrıca

,, http://localhost... gibi tam yolunu speficy yazman gereken grails kontrolörü olarak geçerli sayfanız /api/registration...

+0

Orada benim görünüm sayfamı kontrol ederseniz bir id = "errorDiv" yarattık. Bu kimliği kullandı ve modalModal.js –

+0

içinde bir hata özelliği yaptı. Form sunucusu tarafını hataların denetlenmesiyle yeniden görüntülemekten daha iyi olursunuz. Yanıt için 've' ' –

+0

@JamesKleeh: thanx 'a bakın. Ama isteğimle, veri değerlerimi veritabanına kaydedebildiğimi, ancak yanıt durumunda, mülkün işe yaramadığını biliyorum. Bu yüzden modalModal.js'nin hata özelliğine giriyorum. Ama neden oluyor ve neden uyarımı "başarı" olarak almıyorum? –

0

göre bunu belirtin yoktur:

if (!beanName.hasErrors() && beanName.validate()) { 
     // TODO 
    } else { 
     render status: Constants.SC_VALIDATION_FAILED, view: "viewName", model: [beanName: beanName] 
} 

ve görünümde:

<div> 
<g:hasErrors bean="${beanName}"> 
    <div class="errors"> 
    <g:renderErrors bean="${beanName}" as="list"/> 
    </div> 
</g:hasErrors> 
</div> 
İlgili konular