2016-06-09 4 views
0

저는 스프링과 타임 라이트를 사용하고 있습니다. 사용자 등록 양식에서 특정 URL에 일을 게시하고 있습니다. 봄에는 오류가 있는지 확인하고 있습니다. 그래서 몇 가지 오류가있는 경우 오류를 표시하는 데 사용되는 일부 특성을 추가하고 있습니다. Spring이 원하는 곳으로 방향을 바꾸기를 원하지 않는다. 나는 그가 모델을 업데이트하고 아무것도하지 않기를 바란다. 내가 그걸 성취 할 기회가 있을까?스프링을 리디렉션하지 않겠습니까

컨트롤러

@RequestMapping(value = "/register", method = RequestMethod.POST) 
public String register(@ModelAttribute Person person, Model model){ 
    model = loginPageService.register(person, model); 
    return "loginPage"; 
} 

서비스

public Model register(Person person, Model model){ 
    //check if user exists 
    Person existingPerson = personService.findByEmail(person.getEmail()); 

    if(existingPerson != null){ 
     model.addAttribute("emailUsedError", true); 
    } 
    else{ 
     personService.save(person); 
     model.addAttribute("registered", true); 
    } 

    return model; 
} 

HTML의 일부

<div id="singup"> 
 
      <p class="error" th:if="${registerError}">Wypełnij wszystkie pola!</p> 
 
      <p class="error" th:if="${emailUsedError}">Podany email został już użyty!</p> 
 

 
      <form th:action="@{/register}" th:object="${person}" method="post" onsubmit="return checkPassword(this)"> 
 
       <input type="text" id="imie" name="firstName" placeholder="Imię" onfocus="this.placeholder=''" 
 
         onblur="this.placeholder='Imię'" required> 
 
       <input type="text" id="nazwisko" name="lastName" placeholder="Nazwisko" onfocus="this.placeholder=''" 
 
         onblur="this.placeholder='Nazwisko'" required> 
 
       <input type="text" id="identityNumber" name="identityNumber" placeholder="Nr. indeksu" onfocus="this.placeholder=''" 
 
         onblur="this.placeholder='Nr. indeksu'" required> 
 
       <input type="email" id="email" name="email" placeholder="[email protected]" 
 
         onfocus="this.placeholder=''" onblur="this.placeholder='[email protected]'" required> 
 
       <input type="password" id="password" name="password" placeholder="Hasło" onfocus="this.placeholder=''" 
 
         onblur="this.placeholder='Hasło'" required> 
 
       <input type="password" id="confirm_password" name="confirm_password" 
 
         placeholder="Potwierdź hasło" onfocus="this.placeholder=''" onblur="this.placeholder='Potwierdź hasło'" required> 
 
       <input type="submit" value="Zarejestruj"> 
 
      </form> 
 
     </div>

+0

사용할 수있는 경우 AJAX 요청. – reos

+0

왜 스프링이 리디렉션됩니까? 브라우저가 새로운 페이지를로드하는 것을 원하지 않으면 AJAX를 사용해야합니다. –

답변

0

Thymeleaf + 봄에 나중에

아래
import org.springframework.stereotype.Component; 
import org.springframework.util.StringUtils; 
import org.springframework.validation.Errors; 
import org.springframework.validation.Validator; 

import com.med.quraa.models.User; 


@Component(value = "personValidator") 
public class PersonValidator implements Validator{ 
@Override 
    public boolean supports(Class<?> arg0) { 

     return Person.class.isAssignableFrom(arg0); 
    } 

@Override 
    public void validate(Object form, Errors errors) { 
     Person person=(Person) form; 
     Person existingPerson = personService.findByEmail(person.getEmail()); 
     if(existingPerson != null){ 
     errors.rejectValue("email","", "User already exists");} 
     if(person.getIdentityNumber.isEmpty()){ 
     errors.rejectValue("identityNumber","", "Identifier cannot be blank");} 
     //validate Other Fields 
} 

} 

같은 클래스 검사기를 만들어 사용하십시오 오류가있는 새 HTML보기를 리디렉션하고 작성해야합니다. 이메일이 있는지 확인하고 AJAX를 사용하여이를 처리 할 수있는 API를 만들 수 있습니다.

프로젝트는 작고 당신은 당신이보고보기 측이 유효성을 검사 할 모든 사용할 수 없습니다 이메일을 전달할 수 있습니다 효율성과 보안에 대해 걱정하지 않는다 (그러나이 솔루션은 최악의 솔루션)

0

당신은 더 나은 봄 검사기

서버에 HTML 뷰를 생성하는 컨트롤러

@Autowired 
    private PersonValidator validator; 

@RequestMapping(value = "/register", method = RequestMethod.POST) 
    public String register(@ModelAttribute @Valid Person person ,BindingResult result,final Model model) { 

     validator.validate(Person, result); 
     if(result.hasErrors()){ 
       model.addAttribute("errorMsg",result.getAllErrors().get(0).getCode()); 
//you can manipulate all errors here 

     return "register"; 
     } 
     loginPageService.register(person);//you dont need to add Model as param 

     return "loginPage"; 
    } 
관련 문제