Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jsf 重置<;f:选择项目/>;_Jsf - Fatal编程技术网

Jsf 重置<;f:选择项目/>;

Jsf 重置<;f:选择项目/>;,jsf,Jsf,在我的JSF应用程序中,我有h:selectOneMenu和h:selectOneListBox标记,它们可以正常工作,但我不知道如何将它们重置回第一个条目,这是默认值 我的xhtml代码的一个示例如下: <h:selectOneMenu id="physmenu" value="#{index.physics}" style="height:25px; width:180px;"> <f:selectItems value="#{index.physicsMap

在我的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();   
    }   
}  
@ManagedBean(name=“index”)
@会议范围
公共类MyIndexBean实现可序列化的{
//其他私人变量
私有字符串项值;
私有字符串项标签;
私有弦物理;
Map physicsMap=新建LinkedHashMap();
私有的void initPhysics(){
//循环从输入文件读取的数据
//获取每行输入读取的itemValue和itemLabel
physicsMap.put(itemLabel,itemValue);//每次在循环中都将这些存储在physicsMap中
//其他代码
}    
}   
公共映射getPhysicsMap(){
返回物理地图;
}   
//-----索引页的物理Getter和setter------
公共字符串getPhysics(){
回归物理学;
}   
公共物理(弦物理){
物理=物理;
}   
公共物理(ActionEvent事件){
physicsMap.clear();
}   
}  
同样,对于h:selectOneListBox,我在Java代码中的几个地方创建了一个对象数组,而不是LinkedHashMap

当我从文件中读入数据时,我希望将其保存在内存中,并以某种方式重置JSF用来指定哪个是所选项的指针,但我不知道如何访问该指针。最后的ActionEvent方法只是清除映射,因此没有什么用处

第一次访问页面时,第一个菜单项会显示出来,完全符合我的要求,但如果更改了,则会单击“提交”按钮,然后当我重新访问页面时,仍会显示新的选定值,我看不到如何将其重置为第一个菜单项。JSF如何跟踪指向页面上显示的映射中所选值的索引,以及如何重置它,或者如果我愿意,如何通过编程将它设置为另一个值


这是一个困扰我一段时间的问题,我找不到解决办法。非常感谢您的帮助

选择的值是
{index.physics}
。您需要将其设置为
null


另一种方法是将bean放在请求或视图范围中。我不认为会话范围是实现此目的的正确范围。另请参见

首先检查initPhysics的代码,我想您忘了复制某些内容。其次,您的bean是会话范围的,它将在整个用户会话中都保留在内存中。尝试改用视图范围的bean。非常感谢,但最后我发现通过使用FacesContext context=FacesContext.getCurrentInstance();context.getExternalContext().getSessionMap().remove(“索引”);相反,这是可行的,因为我想保持我的bean会话的范围。这绝对是一个糟糕的设计。当最终用户在多个浏览器选项卡/窗口中打开同一页面时,您的Web应用程序的行为将异常。改为使用视图范围。另请参见上述链接中的答案。