Используется Spring MVC, примерный код представлен ниже:
Методы контроллера
/*<br/>
* Создание нового объекта и его инициализация.<br/>
*/ <br/>
@RequestMapping(value = "/new", method = RequestMethod.GET)<br/>
public String newObject(Model model) {<br/>
Сitizen citizen= citizenDao.getNewObject();<br/>
citizen.setIsLoyalToTheParty(true);<br/>
model.addAttribute("citizen", citizen);<br/>
return "CitizenForm";<br/>
}<br/>
<br/>
/*<br/>
* Обработка заполненной формы.<br/>
*/<br/>
@RequestMapping(value = "/onSubmit", method = RequestMethod.POST)<br/>
public String onSubmit(Сitizen citizen, BindingResult result, SessionStatus status, Model model) {<br/>
citizenValidator.validate(citizen, result);<br/>
if (result.hasErrors()) {<br/>
return "СitizenForm";<br/>
} else {<br/>
citizenDao.save(citizen);<br/>
status.setComplete();<br/>
return "successView"; <br/>
}<br/>
}<br/>
Сущность:
@Entity<br/>
@Table(name = "ASD_CIT")<br/>
public class Citizen implements Serializable {<br/>
@Id<br/>
private Long id;<br/>
private String firstName;<br/>
private String secondName;<br/>
private boolean IsLoyalToTheParty;<br/>
<br/>
public Citizen(){<br/>
}<br/>
<br/>
public String getFirstName() {<br/>
return firstName;<br/>
}<br/>
<br/>
public void setFirstName(String firstName) {<br/>
this.firstName = firstName;<br/>
}<br/>
<br/>
public String getSecondName() {<br/>
return secondName;<br/>
}<br/>
<br/>
public void setSecondName(String secondName) {<br/>
this.secondName = secondName;<br/>
}<br/>
<br/>
public boolean isIsLoyalToTheParty() {<br/>
return IsLoyalToTheParty;<br/>
}<br/>
<br/>
public void setIsLoyalToTheParty(boolean IsLoyalToTheParty) {<br/>
this.IsLoyalToTheParty = IsLoyalToTheParty;<br/>
}<br/>
<br/>
public Long getId() {<br/>
return id;<br/>
}<br/>
<br/>
public void setId(Long id) {<br/>
this.id = id;<br/>
}<br/>
}<br/>
И, наконец, форма:
<form:form commandName="citizen" method="post" action="onSubmit"><br/>
<form:hidden path="id" id="id"/><br/>
<form:input path="firstName" id="firstName"/><br/>
<form:input path="secondName" id="secondName"/><br/>
</form:form><br/>
Как вы видите в коде формы нет поля для свойства IsLoyalToTheParty — оно устанавливается при создании объекта и его редактирование в форме не предусмотрено.
Вопрос следующий: в представленном случае значение свойства IsLoyalToTheParty потеряется на пути Котроллер -> Форма -> Контроллер. Если же я создам «hidden» поле в форме для этого свойства, то оно не потеряется. Но так как реальные объекты состоят из гораздо большего кол-ва таких свойств не хотелось бы на форме создавать поля для этих свойств. Как заставить возвращать из формы именно тот объект, который был передан ей изначально?