【发布时间】:2012-08-03 08:01:09
【问题描述】:
简而言之,这是我的情况。
我有一个带有数据表的页面和几个由 bean 支持的按钮。 Bean 应该使用一些默认属性进行初始化。该属性可以根据操作进行更改。 我从 RequestScoped bean 和 @PostConstruct 注释方法开始。但似乎数据表仅适用于视图(会话)范围。现在我的设置如下所示:
@ManagedBean
@ViewScoped
public class ProductsTableBean implements Serializable {
private LazyDataModel<Products> productsData;
@Inject
private ProductsFacade model;
public void onPageLoad() {
// here some defaults are set
// ...
System.err.println("onPageLoad called");
}
public void addRow() {
// andhere some defaults redefined
// ...
System.err.println("addRow called");
}
...
和来自jsf页面的sn-p:
<p:commandButton action="#{productsTableBean.addRow()}"
title="save"
update="@form" process="@form" >
</p:commandButton>
...
<f:metadata>
<f:event type="preRenderView" listener="#{productsTableBean.onPageLoad}"/>
</f:metadata>
这是调用顺序中出现的主要问题,我有以下输出:
onPageLoad called
addRow called
onPageLoad called <-- :(
但我希望 addRow 成为最后一个被调用的操作,如下所示:
onPageLoad called
addRow called
这里有什么简单的解决方案吗?
【问题讨论】:
-
您在使用
f:ajax吗?显示来自 JSF 的添加行命令按钮/链接代码 -
您好,我使用的是 primefaces,但它似乎只是在内部使用 f:ajax,我更新了问题中的代码。
-
尝试将
<f:event type="preRenderView"放在<h:body>标签上方 -
@PostConstruct到底有多不足? -
@PostConstruct仅在构造 bean 时调用,因此在ViewScoped中仅在重新加载页面时调用它,但我需要在每次单击按钮时调用它。
标签: jsf jakarta-ee jsf-2