重置<f:selectitems> </f:selectitems>

时间:2012-12-30 20:26:35

标签: jsf

在我的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方法只是清除了Map,所以几乎没用。

当第一次访问页面时,第一个菜单项会完全按照我的要求显示,但是如果它被更改则单击提交按钮,然后当我再次访问该页面时,仍然会显示新选择的值,我看不到如何将其重置为第一个菜单项。 JSF如何跟踪指向页面上显示的Map中所选值的索引,如何重置它,或者如果我愿意,可以通过编程方式将其设置为其他值?

这个问题已经困扰了我一段时间,我无法找到解决方案。非常感谢您的帮助

1 个答案:

答案 0 :(得分:2)

所选值为#{index.physics}。你需要把它null

另一种方法是将bean放在请求或视图范围内。我不认为会议范围是适合此目的的范围。另请参阅How to choose the right bean scope?