Spring автоматическое связывание для выпадающих списков для свойств bean-компонентов - PullRequest
0 голосов
/ 17 февраля 2010

Есть ли способ связать свойства bean-компонентов для другого типа bean-компонентов, используя spring.select. Пример:

У меня есть bean-компонент, который необходимо обновить в представлении с помощью свойства BeanB:

public class BeanA {    
  private BeanB bean;
  private int id;

  private void setId(int id){
     this.id = id;
  }

  private int getId(){
     return this.id;
  }

  public void setBean(BeanB bean){
    this.bean = bean;
  }

  public BeanB getBean(){
   return this.bean;
  }
}

public class BeanB{
    private int id;

    private void setId(int id){
       this.id = id;
    }

    private int getId(){
       return this.id;
    }
}

Для представления я хочу отправить список BeanB, который будет выбран из использования контроллера формы пружины:

public class MyController extends SimpleFormController{

protected ModelAndView handleRenderRequestInternal(RenderRequest request, RenderResponse response) throws Exception {
  BeanA bean = new BeanA();
  //... init the bean or retrieve from db

  List<BeanB> list = new ArrayList<BeanB>();
  //... create list of objects

  ModelAndView modelAndView = super.handleRenderRequestInternal(request, response);
  modelAndView.getModel().put("beans", list);
  modelAndView.getModel().put("bean", bean);

  return modelAndView ;
}
}

В jsp я хочу использовать form.select, чтобы выбрать элемент, который я хочу установить для BeanA из данного списка, что-то вроде:

<form:select path="${bean.bean}" items="${beans}"/>

Похоже, это не работает так. Есть ли другое простое решение для этого?

1 Ответ

5 голосов
/ 17 февраля 2010

Чтобы создать выделенную разметку в HTML:

<form:select path="bean" items="${candidates}" itemValue="id" itemLabel="name"/>

Когда форма отправляется, значение передается в Spring в виде строки, которую затем необходимо преобразовать в bean-компонент требуемого типа. Spring использует для этого WebDataBinder, используя PropertyEditors для преобразования в / из String. Поскольку ваш атрибут 'id', вероятно, уже сериализуем как строка, вы уже видите половину этой работы.

Вы ищете это: http://static.springsource.org/spring/docs/2.5.6/reference/mvc.html#mvc-ann-webdatabinder

@InitBinder
protected void initBinder(WebDataBinder binder) {
    binder.registerCustomEditor(BeanB.class, new PropertyEditorSupport() {
        @Override
        public void setAsText(String text) {
            // some code to load your bean.. 
            // the example here assumes BeanB class knows how to return
            //  a bean for a specific id (which is an int/Integer) by
            //  calling the valueOf static method
            // eg:
            setValue(BeanB.valueOf(Integer.valueOf(text)));
        }
    });
}

Документы для Spring 2.5.6, похоже, предполагают, что аннотации @Controller и @InitBinder работают, если они настроены, вам придется экстраполировать для вашей среды.

@ см. http://static.springsource.org/spring/docs/2.5.6/api/index.html?org/springframework/web/bind/WebDataBinder.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...