2016-05-18 5 views
0

В моей регистрационной форме у меня есть поле, которое дает пользователям возможность выбирать роли. Но я хочу только показать две роли: USER и MODERATOR. Но, я не знаю, как действовать. эта форма регистрации JSP:Настроить элементы в форме выберите

<div class="row"> 
<div class="form-group col-md-12"> 
<label style="color:#ffffff;" class="col-md-3 control-lable" for="userProfiles">Roles</label> 
<div class="col-md-7"> 
<form:select path="userProfiles" items="${roles}" multiple="true" itemValue="id" itemLabel="type" class="form-control input-sm" /> 
<div class="has-error"> 
<form:errors path="userProfiles" class="help-inline"/> 
</div> 
</div> 
</div> 
</div> 

У меня есть перечисление: UserProfileType

public enum UserProfileType implements Serializable{ 
USER("USER"), 
DBA("DBA"), 
ADMIN("ADMIN"), 
MODERATOR("MODERATOR"); 

String userProfileType; 

private UserProfileType(String userProfileType){ 
    this.userProfileType = userProfileType; 
} 

public String getUserProfileType(){ 
    return userProfileType; 
} 

} 

А вот как это выглядит:

registration form

Этот мой контроллер, часть ответственным Регистрация

//new user 

    @RequestMapping(value = "/registrationForm", method = RequestMethod.GET) 
    public String newUser(User user, ModelMap model) { 
     //User user = new User(); 
     model.addAttribute("user", user); 
     model.addAttribute("loggedinuser", getPrincipal()); 
     return "registrationForm"; 
    } 

    //save user 

    @RequestMapping(value = { "/registrationForm" }, method = RequestMethod.POST) 
    public String saveUser1(@Valid User user, BindingResult result, 
      ModelMap model) { 

     if (result.hasErrors()) { 
      return "registrationForm"; 
     } 
     if(!userService.isUserSSOUnique(user.getId(), user.getSsoId())){ 
      FieldError ssoError =new FieldError("user","ssoId",messageSource.getMessage("non.unique.ssoId", new String[]{user.getSsoId()}, Locale.getDefault())); 
      result.addError(ssoError); 
      return "registrationForm"; 
     } 

     userService.saveUser(user); 

     model.addAttribute("success", "User " + user.getFirstName() + " "+ user.getLastName() + " registered successfully"); 
     model.addAttribute("loggedinuser", getPrincipal()); 
     //return "success"; 
     return "registrationsuccess"; 
    } 

Я использую весну mvc/security и hibernate. Заранее благодарен

+0

ваш контроллер Spring должен о.е. t эти элементы в модели, так что просто измените код в точке. Если вам нужна дополнительная помощь, отправьте код контроллера. –

+0

Да, именно то, что я пытался сделать: внести некоторые изменения в контроллер, но я потерпел неудачу. Пожалуйста, проверьте сообщение снова, я его отредактировал – Najoua

+0

Этот код бесполезен. Где-то в вашем коде вы заполняете коллекцию ролей. Это не так. –

ответ

1

Данные, которые будут отображаться на странице, должны быть предоставлены и обработаны контроллером. Отфильтруйте роли в контроллере перед передачей в представление.

В зависимости от того, как вы добавляете атрибуты модели вы можете сделать это следующим образом (или любой эквивалентный способ, как Spring MVC является гибкой)

Вы можете создать методы в классе Enum, чтобы вернуть отфильтрованные значения в соответствии с твое нужно:

public enum UserProfileType implements Serializable{ 
USER("USER"), 
DBA("DBA"), 
ADMIN("ADMIN"), 
MODERATOR("MODERATOR"); 

    String userProfileType; 

    private UserProfileType(String userProfileType){ 
     this.userProfileType = userProfileType; 
    } 

    public String getUserProfileType(){ 
     return userProfileType; 
    } 

    public static List<UserProfileType> getAdminRoles(){ 
     return Arrays.asList(UserProfileType.USER , UserProfileType.MODERATOR); 
    } 

} 

@ModelAttribute("roles") 
public List<UserProfileType> roles(){ 
    return UserProfileType.getAdminRoles(); 
} 

Вы также можете выбирать роли в представлении, но его не рекомендуется иметь логику управления на ваш взгляд

<form:select path="userProfiles"multiple="true" class="form-control input-sm"> 
    <c:forEach items="${roles}" var = "role"> 
     <c:if test="${role.type eq 'USER' or role.type eq 'MODERATOR'}"> 
     <form:option value="${role.id}" label="${role.type}"/> 
     </c:if> 
    </c:forEach> 
</form:select> 
+0

На самом деле, я пробовал второе решение, так как это легко, но вместо того, чтобы показывать имена ролей, он показывает свои идентификаторы. Однако, первый, я действительно не понимаю, я не использую это или не называю это в контроллере. Пожалуйста, снова проверьте сообщение, я его отредактировал – Najoua

+0

Произошла ошибка. Я только что обновил эту часть

+0

Большое вам спасибо, это сработало просто отлично – Najoua

Смежные вопросы