【问题标题】:Spring form:select - multiple does not select first option by defaultSpring form:select - multiple 默认不选择第一个选项
【发布时间】:2013-04-10 10:08:50
【问题描述】:

我一直在从事一个使用 Spring 表单标记库 (http://www.springframework.org/tags/form) 的 Spring 项目。

我正在使用一些多个选择框来指示一些选项(国家、工厂、...)
当我将整个列表传递给选择时 - 一切都很好:默认选择选择列表的第一个选项。但是,当用户来自特定国家/地区时,会过滤列表并仅显示他的国家/地区。在这种情况下,默认情况下不选择第一个元素。

JSP 页面:

<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<form:select path="countryValues" multiple="true" size="9" style="width:192px;" cssErrorClass="field-error">
    <form:options items="${command.countries}" itemValue="countryCode" itemLabel="correctDisplayString"/>                                       
</form:select>

Command.java

public List<CountryMaster> getCountries() {
    return countries;
}

public void setCountries(List<CountryMaster> countries) {
    this.countries = countries;
}

Controller.java

@RequestMapping(value = "/overview", method = RequestMethod.GET)
public String overview(HttpServletRequest request, Model model) {
    Attrs attrs = getAttrs(request);
    UserLocale.initUser(getUser(request));
    User user = UserLocale.getUser();
    List<FactoryMaster> factoryList = getFactoryList(attrs);
    List<CountryMaster> countryList = getCountryList(attrs);
    Command command = initCommand(attrs);
    model.addAttribute(command);
    if(user.hasRole(User.NORMAL)&& user.getCountryCode() != null){

        if(countries == null){
             countries=  getDaoBuilder().getDaoCountry().countryMap();               
         }

        String isoCode = countries.get(user
                .getCountryCode());
        List<CountryMaster> buffer = new ArrayList<CountryMaster>();
        for(CountryMaster i : countryList){
            if(isoCode.equalsIgnoreCase(i.getIsoCode())){
                buffer.add(i);                  
            }
        }
        System.out.println("List size: "+buffer.size());
        command.setCountries(buffer);       
    }
    else{
        command.getCountries().addAll(getCountryList(attrs));
    }

    command.getModels().addAll(getModelList(attrs));
    command.setBrands(getBrandList(attrs));
    return "/reporting/overview";
}
private List<CountryMaster> getCountryList(Attrs attrs) {
    List<CountryMaster> result = new ArrayList<CountryMaster>();
    CountryMaster ct = new CountryMaster(CountryMaster.ISO_COUNTRY_JOKER, 00);
    ct.setDescription("ALL");
    result.add(ct);
    result.addAll(attrs.countryList);
    return result;
}

在 HTML 页面上,我可以在其他列表中看到第一个元素具有属性 selected="selected"。任何人都知道为什么当我操纵我的列表时情况并非如此?或者有谁知道这个 selected 属性分配的责任是什么? (这是javascript,java属性,...?)

提前致谢!

【问题讨论】:

    标签: java spring jsp


    【解决方案1】:

    原来可以设置列表框的值:这段代码很容易解决:

    public String overview(HttpServletRequest request, Model model) {
    Attrs attrs = getAttrs(request);
    UserLocale.initUser(getUser(request));
    User user = UserLocale.getUser();
    List<FactoryMaster> factoryList = getFactoryList(attrs);
    List<CountryMaster> countryList = getCountryList(attrs);
    Command command = initCommand(attrs);
    model.addAttribute(command);
    if(user.hasRole(User.NORMAL)&& user.getCountryCode() != null){
    
        if(countries == null){
             countries=  getDaoBuilder().getDaoCountry().countryMap();               
         }
    
        String isoCode = countries.get(user
                .getCountryCode());
        List<CountryMaster> buffer = new ArrayList<CountryMaster>();
        for(CountryMaster i : countryList){
            if(isoCode.equalsIgnoreCase(i.getIsoCode())){
                buffer.add(i);                  
            }
        }
        System.out.println("List size: "+buffer.size());
        command.setCountries(buffer); 
    
        // FIXED SELECTION OF ELEMENT
        command.setFactoryValues(new String[]{isoCode});
        // FIXED SELECTION OF ELEMENT   
    
    }
    else{
        command.getCountries().addAll(getCountryList(attrs));
    }
    
        command.getModels().addAll(getModelList(attrs));
        command.setBrands(getBrandList(attrs));
        return "/reporting/overview";
    }
    

    这样,您使用代码设置列表框的值,当页面打开时 - 该值已经存在,默认选中。

    【讨论】:

      猜你喜欢
      • 2021-03-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-30
      • 1970-01-01
      • 1970-01-01
      • 2021-06-27
      • 1970-01-01
      相关资源
      最近更新 更多