Полосы: я могу предварительно заполнить форму, но после отправки formBean имеет значение null
Я могу предварительно заполнить форму Stripes JSP объектом, client
в моем случае, но когда я отправляю эту форму, мой объект возвращается как ноль.
Я создал второй "временный" объект, который является параллельным дубликатом client
и это сохраняет свои значения, поэтому я не вижу проблемы с передачей объекта в запросе
Моя форма выглядит следующим образом:
<s:form beanclass="com.jameselsey.salestracker.action.ViewClientAction">
<s:hidden name="clientA" value="${actionBean.clientA}"/>
<s:hidden name="clientId" value="${actionBean.clientId}"/>
<table>
<tr>
<td>Name : </td>
<td><s:text name="client.name"/></td>
</tr>
<tr>
<td>Sector : </td>
<td><s:text name="client.sector"/></td>
</tr>
<!-- omitted some attirbutes, not needed here -->
</table>
</s:form>
Мое действие выглядит
public class ViewClientAction extends BaseAction
{
@SpringBean
ClientService clientService;// = new ClientService();
private Integer clientId;
private Client client;
private Client clientA;
public void setClient(Client client)
{
this.client = client;
}
public Integer getClientId()
{
return clientId;
}
public void setClientId(Integer clientId)
{
this.clientId = clientId;
}
public Client getClientA()
{
return clientA;
}
public void setClientA(Client clientA)
{
this.clientA = clientA;
}
public Client getClient()
{
return client;
}
@DefaultHandler
public Resolution quickView()
{
clientA = clientService.getClientById(clientId);
client = clientService.getClientById(clientId);
return new ForwardResolution("/jsp/viewClientQuickView.jsp");
}
public Resolution save()
{
clientService.persistClient(client);
return new ForwardResolution("/jsp/reports.jsp");
}
public Resolution viewClientInfo()
{
client = clientService.getClientById(clientId);
return new ForwardResolution("/jsp/viewClientClientInfo.jsp");
}
...
Если я установил точку останова на clientService.persistClient(client);
я могу увидеть это ClientA
имеет все исходные значения объекта, но client
обнуляется
Я пропустил что-то, что связывает бин формы с client
объект в моем действии?
Спасибо
2 ответа
Добавьте эту строку в свой JSP:
<s:hidden name="client" value="${actionBean.client}"/>
Я получил этот сценарий, добавив метод @Before для повторного увлажнения вложенного объекта. После этого сохранение работает правильно
@Before(stages = LifecycleStage.BindingAndValidation)
public void rehydrate() {
if (context.getRequest().getParameter("save")!=null){
this.domainObject = getHibernateSession().load(DomainObject.class, context.getRequest().getParameter("id"));
}
}
public void save(){
Session session=getHibernateSession();
session.update(domainObject);
session.commit();
//...
}