2011-04-04 56 views
0

我有用户的语言偏好数据库中的数据。我想用Spring MVC管理Web应用程序前端的信息。我通过服务检索首选项,我想根据用户的偏好显示带有预填充数据的公式。弹簧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> 

我想用用户的语言首选项显示预先填充的复选框。我怎样才能做到这一点?

回答

1

您需要为可用语言添加属性并设置表单使用的语言列表。

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

最简单的方法是使用<form:checkboxes>标签(尽管从您的问题描述目前还不清楚究竟应该pathitems):

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

参见:

+0

没错,我对我必须展示的元素感到困惑。我把名字更清楚。谢谢。我回答了我的问题。 – BasicCoder 2011-04-05 09:02:56

相关问题