JSF.在每个页面加载调用支持bean方法
发布时间:2020-12-14 05:56:15 所属栏目:Java 来源:网络整理
导读:参见英文答案 Invoke JSF managed bean action on page load4个 这是我的情况. 我有带数据表的页面和几个由bean支持的按钮.应该使用一些默认属性初始化Bean.可以根据操作更改属性. 我从RequestScoped bean和@PostConstruct注释方法开始.但似乎datatable仅适
参见英文答案 >
Invoke JSF managed bean action on page load4个
这是我的情况. 我有带数据表的页面和几个由bean支持的按钮.应该使用一些默认属性初始化Bean.可以根据操作更改属性. @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"); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |