1

私の JSF アプリケーションには、完全に正しく機能する h:selectOneMenu および h:selectOneListBox タグがありますが、デフォルトである最初のエントリにリセットする方法がわかりません。

私のxhtmlコードの一例は次のとおりです。

<h:selectOneMenu id="physmenu" value="#{index.physics}" style="height:25px; width:180px;">   
    <f:selectItems value="#{index.physicsMap}"/>   
</h:selectOneMenu>

対応する Bean の一部は次のとおりです。

@ManagedBean(name="index")   
@SessionScoped  
public class MyIndexBean implements Serializable {   
    // Other private variables   
    private String itemValue;   
    private String itemLabel;   
    private String physics;   

    Map<String,String> physicsMap = new LinkedHashMap<String,String>();

    private void initPhysics() {   
        // Loop through data read from an input file   
        // Get itemValue and itemLabel for each line of input read   

        physicsMap.put(itemLabel, itemValue); // Store these in physicsMap each time in the loop   

        // Other code   

        }    
    }   

    public Map<String,String> getPhysicsMap() {   
        return physicsMap;   
    }   

    // ----- Getter and setter for physics for the index page -----   

    public String getPhysics() {   
        return physics;   
    }   

    public void setPhysics(String physics) {   
        this.physics = physics;   
    }   

    public void resetPhysics(ActionEvent event) {   
        physicsMap.clear();   
    }   
}  

h:selectOneListBox の場合も同様で、Java コードのいくつかの場所に、LinkedHashMap ではなく、作成したオブジェクトの配列があります。

ファイルからデータを読み込むときに、それをメモリに保持し、JSF が選択された項目を指定するために使用するポインターを何らかの方法でリセットしたいのですが、そのポインターにアクセスする方法がわかりません。最後の ActionEvent メソッドはマップをクリアするだけなので、ほとんど役に立ちません。

ページに最初にアクセスすると、最初のメニュー項目が表示されますが、変更された場合は送信ボタンがクリックされ、ページに再度アクセスすると、新しく選択した値が表示されたままになり、リセットする方法がわかりませんそれを最初のメニュー項目にします。JSF は、ページに表示されたマップで選択された値を指すインデックスをどのように追跡し、それをリセットするか、必要に応じてプログラムで別の値に設定するにはどうすればよいですか?

これはしばらくの間私を悩ませてきた問題であり、解決策が見つかりません。助けてくれてありがとう

4

1 に答える 1

2

選択した値は#{index.physics}. あなたはそれを作る必要がありますnull

別の方法は、Bean をリクエストまたはビューのスコープに入れることです。セッションスコープが目的に適したスコープであるとは思いません。適切な Bean スコープを選択する方法も参照してください。

于 2012-12-30T20:38:28.180 に答える