Если для bean-компонента задана область запроса, необходимо убедиться, что была создана точно такая же модель во время (пост) построения bean-компонента запроса отправки формы, каким он был во время отображения начальной формы.
private List<Item> list;
private DataModel<Item> model;
@PostConstruct
public void init() {
list = itemService.list();
model = new ListDataModel<Item>(list);
}
JSF будет выполнять итерацию по модели на этапе применения значений запроса, чтобы определить нажатую кнопку, чтобы ее можно было вызвать на этапе вызова приложения.
При сохранении модели впоследующий запрос не совсем тривиален из-за некоторых бизнес-ограничений (например, отсутствующие параметры и т. д.), тогда вам нужно поместить компонент в область просмотра, пометив его @ViewScoped
вместо @RequestScoped
.Это работает, только если вы используете JSF 2.0.
@ManagedBean
@ViewScoped
public class MyBean {}
В качестве альтернативы, поскольку вы используете RichFaces, вы также можете использовать <a4j:keepAlive>
для этого.Поместите это где-нибудь на той же странице, что и форма:
<a4j:keepAlive beanName="#{myBean}" />
Это фактически так же, как @ViewScoped
в JSF 2.0.