2012-03-08 7 views
1

I持っている理由は何ができるか、私はoldValueは常にnullであることを見ることができた私の豆ValueChangeEvent getOldValue()がnullである

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} 

の中に、以下の方法で、この?

私のJSFバージョンは1.1で、ページスコープはrequestです。それが何であればHTMLフォームが最後にレンダリングされたフォームの値を提出していない豆

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); 

} 
+0

あなたはvalueChangeイベントが実行されているかどうかを確認できますか? – Kushan

+0

はい、実行されます。 'logger.info(" value "+ oldValue +"〜 "+ newvalue);'は 'public void valueChange(ValueChangeEvent event){'から来ていて、 'event.getNewValue()'の値を見ることができるだけではなく、 – user75ponic

+0

onchangeイベントが原因かもしれません。フォームを手動で送信するとどうなりますか? commandButtonを使って? –

答えて

2

をバックアップ

おかげ

アップデート1

あなたは期待している。

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

古い値は、フォームが送信されたときの "bean"の値です。 "bean"がリクエストスコープである場合、毎回新しいインスタンスが作成されます。私は "Emp"が初期化されていないと推測しているので、nullになります。

+0

私は以下のように初期化しました。 'public void setSelectedItemEmp(String selectedItemEmp){ this.selectedItemEmp = selectedItemEmp; } 'または、まだ何かが欠けていますか? – user75ponic

+0

一般に、フォームが送信されたとき(フォームを他のロジックで実行している場合を除きます)にのみ呼び出されます。フォームが送信されると、 'bean'を解決して' emp'プロパティを更新しようとします。 'bean'はリクエストスコープなので、最後のリクエストからは保持されませんでした。新しいインスタンスが作成され、スコープに配置されます。 getterが呼び出され、nullが返されます。 'ValueChangeEvent'は古い値(null)と新しい入力値で作成されます。 _私はここでいくつか前提をしていますが、多くのコードを提供していません._ – McDowell

+0

上記のコードをアップデート1として追加しました。スコープを変更せずにonChangeを変更しないとoldValueを取得できますか? – user75ponic

-1

トリックをした私は、以前に書いたコードのストリップダウンバージョンは、次のとおりです。もちろん

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(); 
    } 
} 

、他の人が述べたように、yourBeanの範囲はrequestScopedより長くする必要があります。

これが役に立ちます。

+0

これは不器用なアプローチです。単に 'event.getOldValue()'と 'event.getNewValue()'を使用してください。 – BalusC

関連する問題