我目前正在研究JSF 1.2项目(IBM实施和“公司层”)。
这是情况(项目数量仅用于示例),简单CRUD
immediate="true"
(因为我们不想提交修改)false
,则第4项的值就可以了。true
,则项目4的值为OK。<h:outputText value="#{item4.myValue}/>
(UIOutput)而不是<h:inputText value="#{item4.myValue}/>
(UIInput)另外,我在调试模式下检查了我想要显示的bean是“第4项”,它是。
经过对Google的一些研究后,我发现此问题来自lifecycle of JSF,尽管找到的文档和解决方案是针对JSF的特定实现。 所以我想这是因为该值填充了“localValue”而不是“submittedValue”(@see EditableValueHolder interface可以帮助理解),并且这些页面中有一些解决方案
它不起作用(我不会在这里,我发誓^^)。
“刷新”解决方案无效。
“擦除输入”很可怕。我不能承认我需要引用每个输入字段!另外,我在IBM JSF的UIInput上找不到setSubmittedValue()
方法。
“清除”方法无效。我尝试了一个元素,并在完整的组件树上使用此代码
public void cleanAllChildren(List<UIComponentBase> list){
for(UIComponentBase c : list){
this.cleanAllChildren(c.getChildren());
c.getChildren().clear();
}
}
但没有成功。所以我在这里。 我错过了什么吗?有没有一个很好的棘手的解决方案,我没有看到?我对JSF生命周期并不熟悉。
答案 0 :(得分:2)
将带有请求范围数据的bean放在请求范围中,而不是放在会话范围内。
您可能在会话中有整个列表来“保存”数据库调用以及在同一会话中的后续请求中保留值的所有工作。您可以使用单独的会话范围bean,例如DataManager
。然后你应该有一个请求范围的bean来表示所选的项目,例如DataItem
。你可以在托管房产注入的帮助下熟悉这两种豆类。