2012-11-30 27 views
5

Vì tôi đang làm việc trên khuôn khổ grails nhưng không sử dụng ứng dụng controller.My là "Single Page Application" .Tôi không muốn tải lại trang của mình nên tôi đã viết dịch vụ tức là RegistrationService bằng cách gọi Ajax. Vì vậy, tôi đang sử dụng knockout cho data-binding.Database sử dụng là postgresql. Tôi có một trang xem nơi tôi đang có một trường email. Khi tôi nhập id email trùng lặp và nhấp vào nút lưu thì tôi có thể thấy lỗi xác thực nghĩa là "Email đã được thực hiện" nhưng ngay cả khi tôi đang viết id duy nhất thì tôi cũng nhận được lỗi xác thực tương tự. là vì nó đang trong tình trạng lỗi trong trang modalModal.js, Vì vậy, tôi không nhận được làm thế nào để khắc phục vấn đề này. Tôi chỉ muốn khi tôi nhập id duy nhất và bấm nút lưu sau đó nó không nên đưa ra lỗi xác nhận.Cách hiển thị lỗi xác thực phía máy chủ trên trang xem

_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

khi bạn gọi một dịch vụ từ cùng một ứng dụng, không kích thích đường dẫn đầy đủ như 'http: // localhost .. .', Chỉ định nó liên quan đến trang hiện tại của bạn '/ api/registration ...' – BuddhiP

Trả lời

1

Server nên bao gồm các lỗi phía máy chủ trong các phản ứng.

Làm cho các thông báo lỗi đó trở thành thuộc tính của chế độ xem và liên kết với phân đoạn html được tạo kiểu đúng cách.

Ngoài ra, khi bạn gọi một dịch vụ từ cùng một ứng dụng của bạn, đừng speficy đường dẫn đầy đủ như http://localhost..., Chỉ định nó liên quan đến trang hiện tại của bạn /api/registration...

+0

Nếu bạn kiểm tra trang xem của tôi ở đó tôi đã tạo ra một id = "errorDiv". Đã sử dụng id này và tạo thuộc tính lỗi trong modalModal.js –

+0

Bạn nên tắt hoàn trả lại phía máy chủ biểu mẫu bằng kiểm tra lỗi. Tra cứu '' và '' –

+0

@JamesKleeh: thanx để trả lời. Nhưng những gì tôi muốn biết rằng thông qua yêu cầu tôi có thể lưu các giá trị dữ liệu của tôi vào cơ sở dữ liệu nhưng trong trường hợp trả lời, tài sản của nó không hoạt động. Đó là lý do tại sao tôi đang đi vào tài sản lỗi của modalModal.js. Nhưng tại sao nó xảy ra và tại sao tôi không nhận được cảnh báo của tôi là "thành công"? –

0

Trong grails điều khiển bạn nên viết:

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

và trong chế độ xem:

<div> 
<g:hasErrors bean="${beanName}"> 
    <div class="errors"> 
    <g:renderErrors bean="${beanName}" as="list"/> 
    </div> 
</g:hasErrors> 
</div> 
Các vấn đề liên quan