java - JSF - 动态添加的组件的绑定(bind)值

标签 java jsf ajax4jsf

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

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

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

有更好的方法吗?将其放在 session 范围内是否正确?

最佳答案

当您使用 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}" />

关于java - JSF - 动态添加的组件的绑定(bind)值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3720365/

相关文章:

java - 使用 Spring Security 保护方法

java - 如何从渲染的 h :outputText? 将参数传递给方法

java - a4j :support onchange event not firing

java - 如何声明 scala 方法以便可以使用可变参数样式从 Java 调用它

java - 如何获取应用程序的电量使用情况?

java - Ubuntu 接管 Android。我们现在要用 GCC 还是 Android 的 Java NDK/SDK?

java - 多对多关系不创建主键

Java EE 6 : JSF vs Servlet + JSP. 我应该费心学习 JSF 吗?

java - JSF 中的交叉字段验证 h :dataTable

java - 使用数据表在 jsf 中未发生重新渲染