2012-11-30 7 views
5

पर सर्वर साइड सत्यापन त्रुटि को प्रदर्शित करने के लिए कैसे करें क्योंकि मैं grails ढांचे पर काम कर रहा हूं लेकिन नियंत्रक का उपयोग नहीं कर रहा हूं। मेरा एप्लिकेशन "सिंगल पेज एप्लिकेशन" है। मैं अपने पेज को फिर से लोड नहीं करना चाहता, इसलिए मैंने सेवा लिखी है यानी पंजीकरण सेवा अजाक्स कॉलिंग के साथ। तो मैं डेटा बाध्यकारी के लिए knockout का उपयोग कर रहा हूँ। डेटाबेस का उपयोग postgresql है। मेरे पास एक व्यू पेज है जहां मेरे पास ईमेल फ़ील्ड है। जब मैं एक डुप्लिकेट ईमेल आईडी दर्ज कर रहा हूं और सहेजें बटन पर क्लिक कर रहा हूं तो मैं एक सत्यापन त्रुटि देख सकता हूं यानी "ईमेल पहले से ही लिया जा चुका है" लेकिन यहां तक ​​कि अगर मैं एक अद्वितीय आईडी लिख रहा हूं तो मुझे भी वही सत्यापन त्रुटि मिल रही है। ऐसा इसलिए है क्योंकि यह modalModal.js पृष्ठ में त्रुटि स्थिति में जा रहा है, इसलिए मुझे इस समस्या को ठीक करने का तरीका नहीं मिल रहा है। मैं बस चाहता हूं कि जब मैं अद्वितीय आईडी दर्ज करता हूं और बटन सहेजें पर क्लिक करता हूं तो उसे सत्यापन त्रुटि नहीं दी जानी चाहिए।दृश्य पृष्ठ

_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

जब आप अपने एक ही आवेदन से एक सेवा को कॉल, 'http की तरह पूरा पथ speficy नहीं है: // स्थानीय होस्ट .. ।, इसे अपने वर्तमान पृष्ठ '/ api/पंजीकरण के सापेक्ष निर्दिष्ट करें ...' – BuddhiP

उत्तर

1

सर्वर जवाब में सर्वर साइड त्रुटियों को शामिल करना चाहिए।

उन त्रुटि संदेशों को व्यूमोडल की एक संपत्ति बनाएं, और इसे सही ढंग से HTML सेगमेंट स्टाइल करने के लिए बाध्य करें।

इसके अलावा, जब आप अपने एक ही आवेदन से एक सेवा को कॉल, http://localhost... की तरह पूरा पथ speficy नहीं है, यह आपके वर्तमान पृष्ठ /api/registration...

+0

यदि आप मेरा दृश्य पृष्ठ देखते हैं तो मैंने एक आईडी = "errorDiv" बनाया है। इस आईडी का उपयोग किया और modalModal.js –

+0

में एक त्रुटि प्रॉपर्टी बनाई है आप त्रुटियों के लिए चेक के साथ फॉर्म सर्वर पक्ष को फिर से प्रस्तुत करना बेहतर होगा। ' 'और' ' –

+0

@JamesKleeh: उत्तर के लिए thanx देखें। लेकिन मैं यह जानना चाहता हूं कि अनुरोध के माध्यम से मैं डेटाबेस में अपने डेटा मानों को सहेजने में सक्षम हूं लेकिन प्रतिक्रिया के मामले में, यह संपत्ति काम नहीं कर रही है। Thats क्यों मैं modalModal.js की त्रुटि संपत्ति में हो रही है। लेकिन यह क्यों हो रहा है और मुझे "सफलता" के रूप में मेरी चेतावनी क्यों नहीं मिल रही है? –

0

grails नियंत्रक में के सापेक्ष निर्दिष्ट करें कि आप लिखना चाहिए:

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

और ध्यान में रखते हुए:

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