The*_*m34 4 jsf icefaces jsf-2
我正在尝试使用JSF 2.0(过去几个月使用ICEfaces 1.8之后),我试图找出为什么在JSF 2.0中我的支持bean构造函数被多次调用.
bean应该在创建时实例化一次,但每当我单击commandButton时,就会显示"Bean Initialized"文本,指示一个新的Bean对象被实例化.
facelet页面:
<?xml version='1.0' encoding='UTF-8' ?>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html">
<h:body>
<div id="content">
<h:form id="form">
<h:commandButton value="Toggle" action="#{bean.toggleShowMe}"/>
</h:form>
<h:panelGrid rendered="#{bean.showMe}">
<h:outputText value="Show me!"/>
</h:panelGrid>
</div>
</h:body>
</html>
Run Code Online (Sandbox Code Playgroud)
支持bean:
@ManagedBean
@RequestScoped
public class Bean {
private boolean showMe = false;
public boolean isShowMe() {
return showMe;
}
public void setShowMe(boolean showMe) {
this.showMe = showMe;
}
public void toggleShowMe(){
System.out.println(showMe);
if(showMe==true){
showMe=false;
}else{
showMe=true;
}
}
/** Creates a new instance of Bean */
public Bean() {
System.out.println("Bean Initialized");
}
}
Run Code Online (Sandbox Code Playgroud)
这就是全部.只是一个简单的测试.如果我使用ICEfaces 2.0并代替我使用的panelGrid,则会出现相同的行为:
<ice:panelPopup visible="#{bean.showMe}">
Run Code Online (Sandbox Code Playgroud)
我很感激这里有任何帮助.我无法解释它.
更新:为了响应Aba Dov,我@SessionScoped bean,认为它不会在每次请求时调用构造函数并遇到相同的行为.我错过了什么?
您已将bean声明放在请求范围中,并且每次都通过命令按钮触发新的HTTP请求.确实会在每次请求时创建bean.
如果你希望bean只是视图本身存在(就像IceFaces正在为所有ajax的东西做掩盖),那么你需要声明bean视图范围(这是JSF 2.0中的新特性).
@ManagedBean
@ViewScoped
public class Bean implements Serializable {}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13750 次 |
| 最近记录: |