我想使用 JSF 实现类似的东西。(搜索屏幕的一部分)
单击“+”按钮将动态添加越来越多的新行,单击“-”按钮将删除该行。问题是将值(动态创建的行中的用户输入)绑定(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/