ValueChangeEvent getOldValue () является нулем - PullRequest
1 голос
/ 08 марта 2012

У меня в бобе следующий метод

    public void valueChange(ValueChangeEvent event){

        oldValue = (String) event.getOldValue();
        newvalue = (String) event.getNewValue();

 logger.info("values " + oldValue + " to " + newvalue );

И в моем JSF

 <h:selectOneListbox size="1" 
 value="#{bean.Emp}"   onchange="this.form.submit()"
 valueChangeListener="#{bean.valueChange}

Я мог видеть, что oldValue всегда равно нулю, что может быть причиной этого?

Моя версия JSF - 1.1, а объем страницы - request.

Спасибо

Обновление 1

Фасоль

public class EmpBackingBean {

    private String selectedItemEmp;

    public void selectedItemEmp(String selectedItemEmp) {
        this.selectedItemEmp= selectedItemEmp;
    }

    public String getSelectedItemEmp() {
        return selectedItemEmp;
    }

Управляемый Боб

    EmpBackingBean empBackingBean = new EmpBackingBean();


    public EmpBackingBean getVehDetBackingBean() {
        return empBackingBean ;
    }

public void valueChange(ValueChangeEvent event){

        oldValue = (String) event.getOldValue();
        newvalue = (String) event.getNewValue();

logger.info("values " + oldValue + " to " + newvalue );

}

Ответы [ 2 ]

2 голосов
/ 08 марта 2012

HTML-форма не передает последние отображенные значения формы, если это то, что вы ожидаете.

public class Bean {
  private Object emp;
  public Object getEmp() { return emp; }
  public void setEmp(Object emp) { this.emp = emp; }
}

Старое значение - это значение в "bean" при отправке формы.Если «bean» является областью запроса, каждый раз будет создаваться новый экземпляр.Я предполагаю, что "Emp" не инициализирован, поэтому он будет нулевым.

0 голосов
/ 16 сентября 2012

Ниже приведена урезанная версия кода, который я написал ранее и который добился цели:

public void valeurChangeeListener(ValueChangeEvent event) {

    PhaseId phase = event.getPhaseId(); 

    if (!phase.equals(PhaseId.INVOKE_APPLICATION)) {    
        oldValue = yourBean.getYourValue();
        event.setPhaseId(PhaseId.INVOKE_APPLICATION);
        event.queue();
    } else {
        newValue = yourBean.getYourValue();
    }
}

Конечно, как утверждают другие, область действия вашегоBean должна быть длиннее, чем requestScoped.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...