gpt4 book ai didi

JSF。在每个页面加载时调用支持 bean 方法

转载 作者:行者123 更新时间:2023-12-04 14:31:51 26 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





Invoke JSF managed bean action on page load

(4 个回答)


4年前关闭。




简而言之,这是我的情况。

我有带有数据表的页面和由 bean 支持的几个按钮。 Bean 应该使用一些默认属性进行初始化。该属性可以根据操作进行更改。
我从 RequestScoped bean 和 @PostConstruct 注释方法开始。但似乎数据表仅适用于 View(Session) 范围。现在我的设置看起来像这样:

@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 页面的片段:
    <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

这里有什么简单的解决方案吗?

最佳答案

检查此链接:
http://www.mkyong.com/jsf2/jsf-2-prerenderviewevent-example/

你知道这个事件是在每个请求上调用的:ajax,验证失败......你可以检查它是否是这样的新请求:

public boolean isNewRequest() {
final FacesContext fc = FacesContext.getCurrentInstance();
final boolean getMethod = ((HttpServletRequest) fc.getExternalContext().getRequest()).getMethod().equals("GET");
final boolean ajaxRequest = fc.getPartialViewContext().isAjaxRequest();
final boolean validationFailed = fc.isValidationFailed();
return getMethod && !ajaxRequest && !validationFailed;
}

public void onPageLoad() {
// here some defaults are set
// ...
if (isNewRequest()) {...}
System.err.println("onPageLoad called");
}

关于JSF。在每个页面加载时调用支持 bean 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11826757/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com