Не очень удачно получить помощь от любого из вас, весенних гуру, здесь.Надеюсь, на этот раз я лучше сформулирую вопрос, чтобы он стал более понятным.У меня довольно простое приложение Spring, использующее базу данных Mysql.По сути, я просто хочу знать, как правильно загружать данные в объект SELECT на форме, но мне нужен весь процесс.
Здесь немного больше глубины.У меня есть объект Job, который хранится в таблице Job в БД.Он привязан к форме, которую пользователь может заполнить, чтобы заполнить объект Job.Объект Job также имеет отношение «многие к одному» с объектом Filter, который хранится в отдельной таблице в БД.Таким образом, когда пользователь создает объект Job с помощью формы, появляется поле SELECT, в которое загружаются объекты Filter для выбора.Пока что весь мой код для этого работает нормально.Объекты фильтра отображаются и затем должным образом сохраняются в БД, так что я считаю, что эта часть правильно внизу.Проблема возникает, когда пользователь пытается редактировать объект Job.Я загружаю форму, и все данные из объекта Job правильно предварительно заполняются в различные поля, за исключением того, что в поле SELECT автоматически не устанавливается выбор сохраненных объектов Job.Объект SELECT загружается с объектами Filter, но он всегда имеет первый выбор, а не 4-й или что-то еще, что хранится в объекте Job.Ясно, что я не делаю что-то правильно или пропускаю какой-то важный аспект этого процесса.Если кто-нибудь может помочь мне здесь, я был бы очень признателен.Это ошибка в приложении для работы, которую я пытаюсь исправить, и я не могу найти решение.Во всяком случае, ниже я опубликовал то, что я считаю всем соответствующим кодом.
Объект задания
@Entity
public class Job implements Runnable {
@Id @GeneratedValue
private Long id;
@ManyToOne
@JoinColumn(name="filterId")
private Filter filter;
//getters and setters
}
Редактор фильтров (для перевода идентификаторапередается из формы в объект Filter)
public class FilterEditor extends PropertyEditorSupport {
private FilterService filterService;
public FilterEditor(FilterService filterService) {
this.filterService = filterService;
}
public void setAsText(String value) {
long filterId = Long.parseLong(value);
Filter f = filterService.getById(provisionId);
setValue(f);
}
}
Job Controller (соответствующие части)
@InitBinder
protected void initBinder(WebDataBinder binder) {
binder.registerCustomEditor(Date.class, new DatePropertyEditor());
binder.registerCustomEditor(Filter.class, new FilterEditor(filterService));
}
@RequestMapping(value="/job", method=RequestMethod.GET)
public void showJobForm(Model model) {
model.addAttribute(new Job());
model.addAttribute("filters", filterService.getAll());
}
@RequestMapping(value="/job/edit", method=RequestMethod.POST)
public String editJob(@RequestParam("jobHiddenList") String list, Model model) {
log.info("Edit List: " + list);
Job job = jobService.getById(Long.valueOf(list.trim()));
model.addAttribute("job", job);
model.addAttribute("filters", filterService.getAll());
return "job";
}
и соответствующие частиJSP
<%@ taglib prefix="sf" uri="http://www.springframework.org/tags/form"%>
<%@ taglib uri="http://www.springframework.org/tags" prefix="s"%>
<s:url value="/job" var="jobPost_url"/>
<s:url value="/job/provData" var="provData_url"/>
<sf:form method="POST" modelAttribute="job" dojoType="dijit.form.Form" action="${jobPost_url}">
<script type="dojo/method" event="onSubmit">
if (!this.validate()) {
return false;
}
return true;
</script>
<sf:hidden path="id" />
<table>
<tr><td align="right">Customer:</td><td>
<sf:input path="customer" dojoType="dijit.form.ValidationTextBox" trim="true" required="true"/><br/>
<sf:errors path="customer" cssClass="error"/>
</td></tr>
<tr><td align="right">Project:</td><td>
<sf:input path="project" dojoType="dijit.form.ValidationTextBox" trim="true" required="true"/><br/>
<sf:errors path="project" cssClass="error"/>
</td></tr>
<tr><td align="right">Date:</td><td>
<sf:input path="date" dojoType="dijit.form.DateTextBox" required="true"
constraints="{datePattern:'MMM d, y'}" /><br/>
<sf:errors path="date" cssClass="error"/>
</td></tr>
<tr><td align="right">Filter:</td><td><sf:select id="filter" path="filter" items="${filters}" itemValue="id"
itemLabel="programName"/></td>
</tr>
<tr><td colspan="2" align="right">
<button dojoType="dijit.form.Button" type="submit">Submit</button>
</td></tr>
</table>
</sf:form>
Если я могу что-то уточнить или предоставить что-то еще, пожалуйста, дайте мне знать.Я пытался исправить это в течение нескольких дней, и я в растерянности.Еще раз спасибо.