我想使用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是会话作用域,一切正常。但是在请求范围内更直观。单个搜索是用户发出的单个请求,绝不与用户会话相关联。同时在会话中使用它会强制开发人员从会话中清除/删除backingbean以显示新的搜索屏幕。
有更好的方法吗?将它放在会话范围内是对的吗?
答案 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}" />