Я попытаюсь объяснить мою проблему как можно более полно и кратко ...
Веб-приложение, созданное на Spring MVC 2.5 + Hibernate + Java 6 (без использования аннотаций!).
У меня есть контроллер, расширяющий SimpleFormController, и страница jsp, которая является его formView и successView.
Этот контроллер должен помочь мне вставить в БД сущность PracticeT, которая подключилась (многие к одному)) объект поиска PracticeConfT (воспринимайте его как «типологию»).Мне нужно выбрать эту «типологию» через выпадающее меню.В моем веб-приложении мне нужно иметь возможность сохранять вставленные данные и, когда я хочу, отправить запрос на утверждение.
На странице есть несколько текстовых полей и это раскрывающееся меню.Компонентом по умолчанию, называемым «команда», является NewPracticeBean, имеющий ссылку на объект PracticeT.
ПРОБЛЕМА ЕСТЬ: Я заполняю форму, выбираю типологию из раскрывающегося меню, отправляю форму исохраняйте данные в БД, но когда я возвращаюсь к представлению, все свойства есть, но выпадающего меню нет: в нем есть все разрешенные опции, но никто не выбран.Некоторые проверки показали, что сущность PracticeConfT имеет значение null (но она была правильно записана в db, и отладка сохраняется в модели до самого конца метода onSubmit !!!).
Надеюсь, кто-то сможетПомоги мне.Заранее спасибо!До свидания, Dolfiz
Вот некоторый полезный код: (Я не думаю, что конфиг hibernate может быть проблемой, но если вам это нужно, я тоже могу опубликовать его)
newPractice.jsp
<form:form id="newPracticeForm" commandName="command">
<input type="hidden" name="action"/>
<spring:nestedPath path="practiceT">
<table class="table-data-form">
<tr>
<td class="left"><spring:message code="" text="Practice type" /></td>
<td>
<form:select path="practiceConfT" multiple="false">
<form:option value="" label="- seleziona -"/>
<form:options items="${practiceTypeList}" itemValue="idPracticeConf" itemLabel="practiceName"/>
</form:select>
</td>
</tr>
<tr>
<td class="left">
<spring:message code="" text="Opzione divisa" />
<br/><form:errors cssClass="errors" path="opzioneDivisa" />
</td>
<td><form:input path="opzioneDivisa" /></td>
</tr>
<tr>
<td colspan="1">
<input type="submit" name="submit" id="submit" value="Save" class="buttonEMS" style="width:100px;" />
</td>
</tr>
</table>
</spring:nestedPath>
</form:form>
NewPracticeBean.java
public class NewPracticeBean implements Serializable{
private PracticeT practiceT;
private String action;
private boolean typeSelected;
public NewPracticeBean(){
super();
this.practiceT = new PracticeT();
}
// getters & setters...
}
PracticeT.java
public class PracticeT implements java.io.Serializable {
private long idPractice;
private PracticeConfT practiceConfT;
private String opzioneDivisa;
// getters & setters...
}
PracticeConfT.java
public class PracticeConfT implements java.io.Serializable {
public static final String PRACTICE_NAME = "practiceName";
private long idPracticeConf;
private String practiceName;
// getters & setters...
}
NewPracticeController.java открытый класс NewPracticeController расширяет SimpleFormController {
protected SmartLogger log = SmartLogger.getLogger(this.getClass());
private PracticeSu practiceSu;
private ConfigurationSu configurationSu;
private HibernateEntityDataBinder practiceConfTBinder;
private HibernateEntityDataBinder practiceTBinder;
public NewPracticeController() {
setCommandClass(NewPracticeBean.class);
setCommandName("command");
}
@Override
protected void initBinder(HttpServletRequest request, ServletRequestDataBinder binder) throws Exception {
log.trace("NewPracticeController -- initBinder");
super.initBinder(request, binder);
binder.registerCustomEditor(PracticeT.class, "practiceT", practiceTBinder);
binder.registerCustomEditor(PracticeConfT.class, "practiceT.practiceConfT", practiceConfTBinder);
}
@Override
protected Map referenceData(HttpServletRequest request) throws Exception {
log.trace("NewPracticeController -- referenceData");
Map model = new HashMap();
RetrieveAllEntitiesReq req = new RetrieveAllEntitiesReq();
req.setEntity(PracticeConfT.class);
req.setOrderProperty(PracticeConfT.PRACTICE_NAME);
RetrieveAllEntitiesResp resp = configurationSu.retrieveAllEntities(req);
List entitiesList = resp.getEntitiesList();
model.put("practiceTypeList", entitiesList);
return model;
}
@Override
protected ModelAndView onSubmit(HttpServletRequest request, HttpServletResponse response, Object command, BindException errors) throws Exception {
NewPracticeBean practiceBean = (NewPracticeBean)command;
Map model = errors.getModel();
CreateNewPracticeReq req = new CreateNewPracticeReq();
req.setPracticeT(practiceBean.getPracticeT());
CreateNewPracticeResp resp = practiceSu.createNewPractice(req);
practiceBean.setPracticeT(resp.getPracticeT());
model.putAll(referenceData(null));
model.put(getCommandName(), practiceBean);
return new ModelAndView(getSuccessView(), model);
}
// setters and getters...
}