2013-02-25 5 views
6

У меня проблемы с отображением выпадающего списка с соответствующими значениями. Я использую теги <spring-form:select>, <spring-form:options> и <spring-form:option>, и я просто не могу заставить его отображать правильные параметры. Следуя приведенному ниже коду, я должен указывать только «Вариант 2», «Вариант 7» и «Вариант 8».spring-form: options tag с enum

* Примечание. Я НЕ хочу показывать каждое возможное значение Enum, но по какой-то причине Spring, похоже, хочет отобразить их все. Похоже, что он полностью игнорирует список, который предоставляется тегу <spring-form:options>.

JSP Теги

<spring-form:select path="selectOptions"> 
    <spring-form:option value="" label="*** Select Option ***" /> 
    <spring-form:options path="${availableOptions}" /> 
</spring-form:select> 

Enum

public enum SelectOptions { 

    // CHECKSTYLE_OFF: LineLength 

    /** 
    * Option 1. 
    */ 
    OPTION_1(1, "Option 1"), 
    /** 
    * Option 2. 
    */ 
    OPTION_2(2, "Option 2"), 
    /** 
    * Option 3. 
    */ 
    OPTION_3(3, "Option 3"), 
    /** 
    * Option 4. 
    */ 
    OPTION_4(4, "Option 4"), 
    /** 
    * Option 5. 
    */ 
    OPTION_5(5, "Option 5"), 
    /** 
    * Option 6. 
    */ 
    OPTION_6(6, "Option 6"), 
    /** 
    * Option 7. 
    */ 
    OPTION_7(7, "Option 7"), 
    /** 
    * Option 8. 
    */ 
    OPTION_8(8, "Option 8"), 
    /** 
    * Option 9. 
    */ 
    OPTION_9(9, "Option 9"), 
    /** 
    * Option 10. 
    */ 
    OPTION_10(10, "Option 10"); 

    private int id; 
    private String description; 

    /** 
    * Constructor. 
    * 
    * @param id the id 
    * @param description the description 
    */ 
    private SelectOptions(final int id, final String description) { 
     this.id = id; 
     this.description = description; 
    } 

    /** 
    * Retrieves the {@link SelectOptions} associated with the passed in id. 
    * 
    * @param id the id associated with the SelectOptions 
    * @return the SelectOptions 
    */ 
    public static SelectOptions getInstance(final int id) { 

     for (final SelectOptions selectOptions : SelectOptions.values()) { 
      if (selectOptions.id == id) { 
       return selectOptions; 
      } 
     } 

     throw new IllegalArgumentException("SelectOptions could not be determined with id [" + id + "]"); 
    } 

    /** 
    * Retrieves the {@link SelectOptions} associated with the passed in description. 
    * 
    * @param description the description associated with the SelectOptions 
    * @return the SelectOptions 
    */ 
    public static SelectOptions getInstance(final String description) { 

     for (final SelectOptions selectOptions : SelectOptions.values()) { 
      if (selectOptions.description == description) { 
       return selectOptions; 
      } 
     } 

     throw new IllegalArgumentException("SelectOptions could not be determined with description [" + description + "]"); 
    } 

    /** 
    * Simple Getter. 
    * 
    * @return the id 
    */ 
    public int getId() { 
     return this.id; 
    } 

    /** 
    * Simple Setter. 
    * 
    * @param id the id to set 
    */ 
    public void setId(final int id) { 
     this.id = id; 
    } 

    /** 
    * Simple Getter. 
    * 
    * @return the description 
    */ 
    public String getDescription() { 
     return this.description; 
    } 

    /** 
    * Simple Setter. 
    * 
    * @param description the description to set 
    */ 
    public void setDescription(final String description) { 
     this.description = description; 
    } 
} 

Контроллер

public class SpringController implements SpringControllerInterface { 

    /** 
    * /WEB-INF/jsp/myJSP.jsp. 
    */ 
    private static final String PAGE = "/WEB-INF/jsp/myJSP.jsp"; 

    /** 
    * {@inheritDoc} 
    */ 
    @Override 
    public ModelAndView load(final Model model) { 

     final ModelAndView mav = new ModelAndView(PAGE); 

     final List<SelectOptions> availableOptions = this.getAvailableOptions(); 

     mav.addObject("availableOptions", availableOptions); 

     return mav; 
    } 

    /** 
    * {@inheritDoc} 
    */ 
    @Override 
    public ModelAndView save(final Model model) { 

     final ModelAndView mav = new ModelAndView(PAGE); 

     // TODO 

     return mav; 
    } 

    /** 
    * {@inheritDoc} 
    */ 
    @Override 
    public Model getModel() { 
     return new ModelImpl(); 
    } 

    /** 
    * @return a list of available options 
    */ 
    public List<SelectOptions> getAvailableOptions() { 

     final List<SelectOptions> availableOptions = Lists.newArrayList(); 

     availableOptions.add(SelectOptions.OPTION_1); 
     availableOptions.add(SelectOptions.OPTION_7); 
     availableOptions.add(SelectOptions.OPTION_8); 

     return availableOptions; 
    } 
    } 

Модель

public class ModelImpl implements Model { 

    private SelectOptions selectOptions; 

    /** 
    * Simple Getter. 
    * 
    * @return the selectOptions 
    */ 
    @Override 
    public SelectOptions getSelectOptions() { 
     return this.selectOptions; 
    } 

    /** 
    * Simple Setter. 
    * 
    * @param selectOptions the selectOptions to set 
    */ 
    @Override 
    public void setSelectOptions(final SelectOptions selectOptions) { 
     this.selectOptions = selectOptions; 
    } 


} 
+0

Кстати, я могу использовать HTML и теги гр, чтобы создать список бут Я хотел бы быть в состоянии фактически использовать весенние метки. Я уверен, что мне просто не хватает чего-то глупого. – Mostfoolish

+0

Я предполагаю, что вы проверили getAvailableOptions(), чтобы убедиться, что список доступных параметров верен? Можете ли вы предоставить этот код и, возможно, HTML, в конечном итоге, после того, как все будет отображаться в браузере? – CodeChimp

+0

доступныйОпции был списком, который я просто создал в контроллере. И да, я подтвердил, что у него есть 3 варианта, которые я ожидал в нем. – Mostfoolish

ответ

3

Похоже, решение этой проблемы состояло в том, что я использовал атрибут «путь» в теге <spring-form:options>. Это должны были быть «предметы», а не «путь».

исправленное JSP фрагмент:

<spring-form:select path="selectOptions"> 
    <spring-form:option value="" label="*** Select Option ***" /> 
    <spring-form:options items="${availableOptions}" /> 
</spring-form:select> 
0

Вам даже не нужно использовать атрибут items, если вы используете тег <spring-form:options>.
Параметры тега:
Предоставляет список тегов «HTML». Устанавливает «выбранный» по мере необходимости на основе связанного значения.
Ссылки Spring form tld. Так что для вашей потребности я думаю, что падение до JSTL core с <spring-form:option/> будет достаточным.

+1

Выполнение этого отображения каждого значения в Enum - это НЕ то, что я хочу сделать. – Mostfoolish

11

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

Enum:

public enum Coin { 

    HEADS("Heads", "heads"), 
    TAILS("Tails", "tails"); 

    private final String fullName; 
    private final String shortName; 

    private Coin(String fullName, String shortName) { 
     this.fullName = fullName; 
     this.shortName = shortName; 
    } 

    public String getFullName() { 
     return fullName; 
    } 

    public String getShortName() { 
     return shortName; 
    } 

} 

Передача этого перечисления в модель:

model.addObject("coins", Coin.values()); 

Используя его в вашей странице JSP с формой:

<form:select path="selection"> 
    <form:options items="${coins}" itemValue="shortName" itemLabel="fullName" /> 
</form:select> 
Смежные вопросы