Jsf 如何将组件与视图范围的托管bean中的对象绑定?
我正在尝试创建一个动态面板(包含各种项目的面板),然后我想将其与视图页面中的面板组件绑定,具有面板对象的托管bean的范围是Jsf 如何将组件与视图范围的托管bean中的对象绑定?,jsf,managed-bean,icefaces,Jsf,Managed Bean,Icefaces,我正在尝试创建一个动态面板(包含各种项目的面板),然后我想将其与视图页面中的面板组件绑定,具有面板对象的托管bean的范围是@ViewScoped。 我注意到任何ajax在视图页面中呈现这个面板都会重建托管bean,这是为什么? 这是我的密码: 这是托管bean: package test; import org.icefaces.ace.component.panel.Panel; @ManagedBean(name = "myBean") @ViewScoped public clas
@ViewScoped
。
我注意到任何ajax
在视图页面中呈现这个面板都会重建托管bean,这是为什么?
这是我的密码:
这是托管bean:
package test;
import org.icefaces.ace.component.panel.Panel;
@ManagedBean(name = "myBean")
@ViewScoped
public class myBean {
private Panel myPanel;
// Constructor
public myBean() {
myPanel = drawPanel(); // this function initiate and add items to the panel
}
// Setters and Getters Methods
}
这是查看页面:
<h:form>
<ace:panel binding="#{myBean.myPanel}"></ace:panel>
<ace:pushButton actionListener="#{myBean.something}">
<ace:ajax render="@form" />
</ace:pushButton>
</h:form>
每次我按下按钮,托管bean构造函数就会被调用,为什么会发生这种情况?
我还注意到,如果我从面板组件中删除binding属性,或者创建托管bean会话的作用域或应用程序作用域,则构造函数不会被调用
注意:我使用的是IceFaces3和JSF2.0
这种情况有什么解决办法吗?正如ICEFaces文档所说: 按钮是一个组件,允许输入完整的表单或仅输入其本身。它具有与常规jsf命令按钮相同的功能,但不必添加额外的属性 因为按钮是一个命令按钮,所以它可以进行导航。如果不使用其action属性,它将应用其默认值。我找不到它是什么(我只是怀疑它是一个空字符串) JSF导航规则取决于UIC命令的操作结果:
- null或void:重新加载当前视图
- 空字符串:重新创建当前视图(如果重新创建了视图,视图范围的bean也会这样做)
- 非空字符串:导航处理程序确定的下一个视图
<ace:pushButton action="#{myBean.nextPage}" actionListener="#{myBean.something}">
public class MyBean // You use myBean here in your question improperly
{
public String nexPage()
{ return null; }
}