Jsf 重置<;f:选择项目/>;
在我的JSF应用程序中,我有h:selectOneMenu和h:selectOneListBox标记,它们可以正常工作,但我不知道如何将它们重置回第一个条目,这是默认值 我的xhtml代码的一个示例如下: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
<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应用程序的行为将异常。改为使用视图范围。另请参见上述链接中的答案。