Если у вас есть C ++ 11, есть еще более короткий метод: ранжированный для . Его цель именно это.
std::vector v {1,2,3,4,5};
for (int element : v)
std::cout << element; //prints 12345
Вы также можете применять ссылки и const к нему, когда это уместно, или использовать auto, когда тип long.
std::vector> v {{1,2,3},{4,5,6}};
for (const auto &vec : v)
{
for (int element : vec)
cout << element;
cout << '\n';
}
Выход:
123
456
Думаю, вы правы. Вам необходимо зарегистрировать настраиваемый редактор в подшивке, как вы это делали раньше, чтобы вы могли преобразовать String в экземпляр Server. Здесь в справочной документации Spring есть пример настраиваемого PropertyEditor , который должен помочь вам начать работу.
Я согласен с тем, что документация MVC не самая лучшая. Мне пришлось много гуглить и искать на форумах Spring.
Так же, как дополнение к ответу Марка, вот что я в итоге сделал в своем контроллере.
@Override
protected void initBinder(HttpServletRequest request, ServletRequestDataBinder binder) throws Exception {
binder.registerCustomEditor(Server.class, "serverId", new PropertyEditorSupport() {
@Override
public void setAsText(String text) {
Server type = (Server) em.createNamedQuery("Server.findById")
.setParameter("id", Short.parseShort(text)).getSingleResult();
setValue(type);
}
});
}
Вы также можете сделать это, используя Spring инъекцию, в отличие от анонимных классов. Это обозначено ссылкой в ответе Марка.
Вы также можете расширить ClassEditor (см. Ниже) вместо PropertyEditorSupport. В документации Javadoc говорится:
Редактор свойств для java.lang.Class, чтобы разрешить прямое заполнение свойства Class без необходимости использования свойства имени класса String в качестве моста.
Не знаю, полностью ли я понимаю преимущества этого, но о чем следует помнить.