2016-06-09 50 views
0

我正在使用Spring和Thymeleaf。在用戶註冊表單中,我將內容發佈到特定的URL。在春天我正在檢查是否有一些錯誤發生。所以如果有一些錯誤,我會添加一些用來顯示錯誤的屬性。比我不想讓Spring在任何地方重定向。我想讓他更新模型,不要做別的。我有能力實現這個目標嗎?我不想讓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

爲什麼Spring會重定向?如果你的意思是你不想讓瀏覽器加載一個新頁面,那麼你需要使用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視圖所以它需要重定向並創建新的錯誤的HTML視圖。您可以創建一些API來檢查是否存在電子郵件,並使用AJAX來處理此問題。

如果你的項目是小,你不關心效率和安全性,你可以通過所有不可用電子郵件來查看,並試圖驗證這一觀點上側(但這種方法是最糟糕的解決方案)

0

你最好使用Spring驗證

在控制器

@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"; 
    }