例如,在 ViewScope 中,一旦构建了视图form.xhtml
,只要您不离开此视图,其数据就会持续存在。要保持在同一视图中,您应该调用具有返回类型的方法void
(通常用于actionListener
属性)或返回 null,以防返回导航结果。
在您的情况下,您的方法是无效的,但您不是将其传递给操作侦听器,而是在视图中调用它。
尝试更改类似的代码,如下所示:
<a4j:commandButton value="SAVE" actionListener="#{legendbean.saveLegend()}" render="mainPnl"/>
To this:
<a4j:commandButton value="SAVE" actionListener="#{legendbean.saveLegend}" render="mainPnl"/>
As actionListener
属性已经需要一个方法表达式。
我还注意到你的数据表中有一个表单。这可能会导致奇怪的行为,因为你的表单有一个id
它将在结果页面中重复。为此,您应该尝试将表单放置在数据表之外。
更好的是,您可以只有一个包含整个代码的表单,因为嵌套表单是无效的 HTML 代码。
我建议你检查一下你的legendTemplate.xhtml
也反对嵌套形式。
为了初始化你的bean状态,建议使用@PostContruct
方法而不是 bean 构造函数。
尝试从此改变:
public LegendController() {
legendDTO = new LegendDTO();
legendDTO.getList().add(new Legend());
}
To this:
@PostConstruct
public void reset() {
legendDTO = new LegendDTO();
legendDTO.getList().add(new Legend());
}
并删除你的构造函数。
只要您处于同一视图(也称为 .xhtml 页面),您的 bean 数据就应该保留。
我希望它有帮助。