JSF - 动态添加的组件的绑定值

时间:2010-09-15 17:58:58

标签: java jsf ajax4jsf

我想使用JSF实现类似的东西。(搜索屏幕的一部分)alt text

在“ + ”按钮上动态添加越来越多的新行,点击“ - ”按钮即可删除该行。问题是将值(动态创建的行中的用户输入)绑定到支持模型。

我创建了一个会话范围的辅助bean。代码的某些部分,

public class BackingBean{
  //other code

  private List<Criteria> searchFilters; // Each criteria is bound to a row

  public void init(){
   //init code
  }
  public void addEmptyCriteria(){
    searchFilters.add(MyFactory.createNewCriteria());
  }

}

+ 按钮的操作触发addEmtpyCriteria方法并重新渲染(使用a4j)整个部分(使用新行)。

这只是一个样板文件,只要bean是会话作用域,一切正常。但是在请求范围内更直观。单个搜索是用户发出的单个请求,绝不与用户会话相关联。同时在会话中使用它会强制开发人员从会话中清除/删除backingbean以显示新的搜索屏幕。

有更好的方法吗?将它放在会话范围内是对的吗?

1 个答案:

答案 0 :(得分:1)

当您使用JSF 2.0时,您可以将bean放在view范围内。

@ManagedBean
@ViewScoped
public class BackingBean {
    // ...
}

当你还在使用JSF 1.x时,最好的办法就是使用a4j:keepAlive。使bean请求作用域并将以下内容添加到JSF页面:

<a4j:keepAlive beanName="managedBeanName" />

如果您没有使用Ajax4jsf,那么我会建议Tomahawk's t:saveState。它基本上是一样的。

<t:saveState value="#{managedBeanName}" />