Шов - понимание объема страницы и области разговора
Я до сих пор запутался в PAGE
и CONVERSATION
(временная) область. Может быть, я получу некоторую помощь здесь. Насколько я знаю, переменные выводятся в PAGE
Область действия до тех пор, пока пользователь отправляет только одну и ту же страницу. Временный CONVERSATION
область вместо этого даже переживает перенаправление на следующую страницу. Вот небольшой пример с двумя эффектами, которые меня смущают:
Во-первых, компонент и выделения в CONVERSATION
сфера и tempUser
данные отображаются на странице JSF. Но в методе сохранения, вызываемом с этой jsf-страницы, tempUser
нулевой. Зачем?
Во-вторых, если я сделаю то же самое, но поменяю компонент и области @In/@Outs на PAGE
сфера, tempUser
правильно вводится при обратной передаче - но не сохраняется, по любой причине, хотя даже super.update()
-метод на userHome
вызывается. Или есть проблема в использовании homeEntities таким способом (идея заключается в том, чтобы использовать их только в качестве оболочки DAO)?
@Name("userAction")
@Scope(ScopeType.CONVERSATION)
public class UserAction implements Serializable {
private static final long serialVersionUID = -4852371546895918692L;
@In(create = true)
private UserHome userHome;
@Out(scope = ScopeType.CONVERSATION)
@In(required = false,scope = ScopeType.CONVERSATION)
User tempUser;
@RequestParameter
private Long userId;
@Factory("tempUser")
public User getUser() {
if (tempUser == null) {
userHome.setUserId(userId);
tempUser = userHome.getInstance();
userHome.clearInstance();
}
return tempUser;
}
public void save() {
userHome.setInstance(tempUser);
userHome.update();
}
}
В xhtml содержится форма a a:
<a:commandButton
id="update"
styleClass="button admin"
action="#{userAction.save}"
value="#{messages['user.action.update']}"/>
Спасибо за ответы. Извините, если это две проблемы в одной.