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: <input name="firstName"
class="formElement" data-bind='value: firstName'/></label></p>
<p><label>last name: <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:
<input name="email" class="formElement" data-bind='value: email' /></label><label
id="errorDiv"></label></p>
<p><label>password: <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
}
}
}
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