Инициализировать значения модели только по первоначальному запросу, а не по запросу обратной передачи

У меня есть управляемый компонент AddDeviceBean, где при создании экземпляров всех объектов домена, используемых на экране, в конструкторе

public AddDeviceBean() {
    device = new DeviceVO();
    deviceacct = new DeviceAccountsVO();
    deviceconfig = new DeviceConfigVO();
    devicecurr =new DeviceCurrencyVO();
    devicelink = new DeviceLinkVO();
    devicetran = new DeviceTranVO();
    devicecd = new DeviceCDVO();
    deviceBlank = new DeviceBlankVO();
    comments = new ArrayList<DeviceCommentsVO>();

}

У меня есть последовательность DB2, следующее значение которой должно быть установлено для свойства при загрузке страницы.

Я использую аннотацию @PostConstruct для создания следующего значения и установки значения.

Проблема в том, что у меня есть commandButton на экране, который вызывает некоторый метод в одном и том же bean-компоненте, а @PostConstruct вызывается дважды после отправки, и вызывается следующее значение DB2

Мне нужно получить следующее значение только один раз во время загрузки страницы, а не во время отправки


person user2462959    schedule 13.11.2013    source источник


Ответы (1)


Это действительно произойдет, когда ваш управляемый компонент находится в области запроса. Компонент области запроса создается для каждого отдельного HTTP-запроса. Первоначальный запрос считается одним запросом. Отправка формы (постбэк) считается еще одним запросом.

Если вы хотите, чтобы bean-компонент жил до тех пор, пока вы взаимодействуете с одним и тем же представлением, вам следует вместо этого сделать его представлением.

@ManagedBean
@ViewScoped
public class AddDeviceBean {
    // ...
}

Смотрите также:

person BalusC    schedule 13.11.2013
comment
Спасибо @Balusc. Это сработало, когда я перешел на ViewScoped, но я получаю NotSerializableException: ошибка javax.faces.component.html.HtmlSelectOneMenu - person user2462959; 13.11.2013
comment
Просто перестаньте использовать binding для свойства компонента. Как правило, вам это вообще не нужно и не нужно как свойство bean-компонента. См. также stackoverflow.com/questions/14911158/ - person BalusC; 13.11.2013