Форма Spring mvc предварительно заполнена: список предпочтений - PullRequest
0 голосов
/ 04 апреля 2011

У меня есть данные в базе данных для языковых предпочтений пользователя. Я хочу управлять этими данными в интерфейсе веб-приложения с помощью Spring MVC. Я получаю настройки по сервисам и хочу отобразить формуляр с предварительно заполненными данными из настроек пользователя.

У меня есть список всех доступных языков, которые я получаю с помощью службы в моем контроллере:

@RequestMapping
public String preferences(@ModelAttribute PreferencesDto preferencesDto, ModelMap modelMap, HttpServletRequest request) {        
    final List<Language> languages = languageService.getEuropeanLanguage();
    modelMap.addAttribute("languages", languages);

    List<Language> userLanguages = preferenceService.getUserLanguages(getLoggedUser()); 
    modelMap.addAttribute("userLanguages", userLanguages);

    modelMap.addAttribute("preferencesDto", preferencesDto);

    return "preferences";
}

В моем jsp я перебираю список языков для отображения флажков, связанных с языком:

<form:form commandName="preferencesDto">
    <c:forEach items="${languages}" var="language">
       <form:checkbox path="languages" value="${language}" id="cl${language.id}"/>
       ${language.code6391}
    </c:forEach>
    <input type="submit" value="Save"/>
</form:form>

Я хочу отобразить предварительно заполненные флажки с языковыми предпочтениями пользователя. Как я могу это сделать?

Ответы [ 2 ]

1 голос
/ 05 апреля 2011

Вам необходимо добавить атрибут для доступных языков и задать список языков для использования dto в форме.

DTO:

public class PreferencesDto implements Serializable {
    private static final long serialVersionUID = 1L;
    private List<Language> languages = new ArrayList<Language>(0);

    public List<Language> getLanguages() {return languages;}
    public void setLanguages(List<Language> languages) {this.languages = languages;}
}

Контроллер:

@RequestMapping
public String preferences(@ModelAttribute PreferencesDto preferencesDto, BindingResult result, ModelMap modelMap, HttpServletRequest request) {        
    modelMap.addAttribute("preferencesDto", preferencesDto);
        // Manage available data
        modelMap.addAttribute("languagesAvailable", languageService.getEuropeanLanguage());        

        // pre-filled DTO with prefered languages
        preferencesDto.setLanguages(getPreferedLanguages(request));

    return "preferences";
}

/** Manage preferences languages for user logged */
private List<Language> getPreferedLanguages(HttpServletRequest request) {
        final List<Language> languagesSelected = new ArrayList<Language>(0);
        // TODO : call a service to get the prefered language for the logged user and fill the list
        return languagesSelected;
}

JSP:

<form:form commandName="preferencesDto">
    <c:forEach items="${languagesAvailable}" var="item">
        <form:checkbox path="languages" value="${item}"/>${item.code6391}
    </c:forEach>
    <input type="submit" value="Save"/>
</form:form>

Или используйте тег:

<form:checkboxes path="languages" items="${languagesAvailable}"/>
0 голосов
/ 04 апреля 2011

Самый простой способ - использовать тег <form:checkboxes> (хотя из вашего описания проблемы не ясно, какими должны быть path и items):

<form:form commandName="preferencesDto"> 
     <form:checkboxes path = "languages" items = "${languages} />
</form:form>

Смотри также:

...