Spring - связывающий с объектом, а не Строкой или примитивом

Используйте flex-box на контейнере, который будет содержать как 'form', так и '.stuff' div.

Используйте justify-content для выравнивания контента в соответствии с вашими потребностями. Проверьте включенный фрагмент кода.

#border {
	border: 5px solid #101010;
	background-color: white;
	position: relative;
	margin: auto;
	width: 700px;
	padding: 0px 15px 0px 15px;
}

.block {
  position: relative;
	border: 1px solid black;
	border-style: none none solid none;
	padding: 0px 0px 10px 0px;
	overflow-x: hidden;
	overflow-y: auto;
}

.flex-container
{
  display: flex;
  justify-content: space-between;
}



.stuff {
	border: 2px solid black;
	margin: 0% 0% 0% 0%;
  right: 10px;
	bottom: 0;
	line-height: 0;
}

form {
	margin: 0% 0% 5px 0%;
	border: 2px solid black;
	float: left;
}
<div id="border">

<div class="block">
 <h3>header1</h3>
 <div class="flex-container">
  <form>
   <input name="A" type ="radio">1<br>
   <input name="A" type ="radio">2<br>
   <input name="A" type ="radio">3
  </form>
  <div class="stuff">
   <h4>stuff</h4>
   <input type="range" min="0" max="100" value="50">
   <input type="checkbox">Check
  </div>
 </div>
</div>

<div class="block">
 <h3>header2</h3>
 <div class="flex-container">
  <form>
   <input name="B" type ="radio">1<br>
   <input name="B" type ="radio">2<br>
   <input name="B" type ="radio">3<br>
   <input name="B" type ="radio">4<br>
   <input name="B" type ="radio">5
  </form>
  <div class="stuff">
  <h4>stuff</h4>
  <input type="range" min="0" max="100" value="50">
  <input type="checkbox">Check
 </div>
</div>

<div class="block">
 <h3>header3</h3>
 <div class="flex-container">
  <form>
   <input name="C" type ="radio">this is a really really really really really really really really really really really long line
  </form>
  <div class="stuff">
   <h4>stuff</h4>
   <input type="range" min="0" max="100" value="50">
   <input type="checkbox">Check
  </div>
 </div>
 </div>
</div>

6
задан morgancodes 5 February 2009 в 16:30
поделиться

1 ответ

Ключом ко всему этому этого является PropertyEditor.

Необходимо определить PropertyEditor для класса Завтрака и затем настроить ServletDataBinder с помощью registerCustomEditor в initBinder методе контроллера.

пример:

public class BreakfastPropertyEditor extends PropertyEditorSupport{
    public void setAsText(String incomming){
        Breakfast b = yourDao.findById( Integer.parseInt(incomming));
        setValue(b);
    }
    public String getAsText(){
        return ((Breakfast)getValue()).getId();
    }
}

обратите внимание необходимость в некоторой пустой проверке и т.д. но Вы получаете идею. В Вашем контроллере:

public BreakfastFooBarController extends SimpleFormController {
    @Override
    protected void initBinder(HttpServletRequest request, ServletRequestDataBinder binder) {
        binder.registerCustomEditor(Breakfast.class, new BreakfastPropertyEditor(yourDao));
    }
}

вещи не упустить:

  • PropertyEditor не ориентированы на многопотоковое исполнение
  • если Вы нуждаетесь в пружинных бобах, или вручную вводите их или определяете их пружиной как опытный объем, и используйте инжекцию метода в свой контроллер
  • бросьте IllegalArgumentException, если входящий параметр не будет допустим/не найденный, то пружина преобразует это в ошибку привязки правильно

надеюсь, это поможет.

Редактирование (в ответ на комментарий): Это выглядит немного странным в данном примере, потому что BreakfastSelectCommand не похож на объект, я не уверен, каков фактический сценарий, который Вы имеете. Скажите, что это - объект, например, как Person с a breakfast свойство затем formBackingObject() метод загрузил бы объект Человека из PersonDao и возвратите его как команду. Обязательная фаза затем изменила бы свойство завтрака в зависимости от выбранного значения, такого, что команда, которая прибывает в onSubmit имеет свойство завтрака все настроенные.

В зависимости от реализации Ваших объектов ДАО, называя их дважды или пытаясь загрузить тот же объект дважды на самом деле не означает, что Вы получите два выполняемые SQL-оператора. Это применяется особенно для Спящего режима, где это гарантирует, что возвратит тот же объект, который находится в, он - сессия для данного идентификатора, таким образом выполняя разрешение обязательной попытке загрузиться Breakfast выбор даже через него не изменился, не должен приводить ни к каким неуместным издержкам.

8
ответ дан 16 December 2019 в 21:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: