如何在关闭窗口之前检查必填字段?

时间:2015-04-20 02:45:10

标签: javascript jsf primefaces

我有JSF页面,我想创建保存和关闭按钮,但是如果用户不输入要保留的所有必填字段。 所以这将完全符合我的要求,但它不会关闭窗口。

<h:commandLink action="#{projectsControllerCreate.create}"
               value="#{bundle.CreateProjectsSaveLink}" />

这将关闭窗口,而不是输入的内容。

<p:commandButton action="#{projectsControllerCreate.create}"
                 value="#{bundle.CreateProjectsSaveLink}"  
                 onclick="window.close()"/> 

我已将JS Exit()添加到按钮但它不起作用?

function Exit() {
    var x = #{projectsControllerCreate.selected.projectName.length()
    }

    if (x > 0) {
        window.close();
    }
}
<p:commandButton action="#{projectsControllerCreate.create}"
                 value="#{bundle.CreateProjectsSaveLink}"  
                 onclick="Exit()" />

如果一切正常并且发送window.close();命令,我可以检查创建吗?

public String create() {
    try {
        getFacade().create(current);
        JsfUtil.addSuccessMessage(ResourceBundle.getBundle("/Bundle").getString("ProjectsCreated"));
        return prepareCreate();
    } catch (Exception e) {
        JsfUtil.addErrorMessage(e, ResourceBundle.getBundle("/Bundle").getString("PersistenceErrorOccured"));
        return null;
    }
}

1 个答案:

答案 0 :(得分:1)

你可以用两种方式做到这一点 一个是你可以使用Primefaces RequestContext从ManagedBean的Action方法本身关闭窗口。示例showcase

RequestContext.getCurrentInstance().execute("CLOSE_YOUR_WINDOW_HERE");

第二种方法是使用RequestContext args的客户端回调来检查验证是否失败。

oncomplete="(args &amp;&amp; !args.validationFailed){CLOSE_YOUR_WINDOW_HERE}&#34;

请务必仅在args的{​​{1}}中使用oncomplete。由于p:commandButton将作为AjaxCall响应的一部分提供,因此在args中使用上方/可能会onclick作为args返回。