1

我想使用 JSF 实现类似的东西。(搜索屏幕的一部分)替代文字

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

我创建了一个会话范围的支持 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 是会话范围的,一切都可以正常工作。但是将它放在请求范围内更直观。单个搜索是用户发出的单个请求,与用户会话无关。在会话中也有它,强制开发人员从会话中清除/删除支持bean,以便显示新的搜索屏幕。

有没有更好的方法来做到这一点?将它放在会话范围内是否正确?

4

1 回答 1

1

当您在 JSF 2.0 上时,您只需将 bean 放在view作用域中即可。

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

当您仍在使用 JSF 1.x 时,最好的选择是使用a4j:keepAlive. 使您的 bean 请求限定范围并将以下内容添加到 JSF 页面:

<a4j:keepAlive beanName="managedBeanName" />

如果您不使用 Ajax4jsf,那么我会建议使用Tomahawk 的 t:saveState. 它的作用基本相同。

<t:saveState value="#{managedBeanName}" />
于 2010-09-15T18:03:01.900 回答