【问题标题】:How to check for required fields before closing window?如何在关闭窗口之前检查必填字段?
【发布时间】:2015-04-20 02:45:09
【问题描述】:

我有 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;
    }
}

【问题讨论】:

  • 这可能与将标记渲染到浏览器的时间与支持 bean 中的值有关。您应该在服务器端执行评估

标签: javascript jsf primefaces


【解决方案1】:

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

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

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

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

请记住仅在您的p:commandButton 中的oncomplete 中使用args。因为args 将作为您的AjaxCall 响应的一部分提供,所以在onclick 中使用上面将/可能将args 作为null 返回。

【讨论】:

  • 问题中没有任何内容表明 OP 有对话框。
  • 抱歉,我认为它是 Primefaces 对话框。我会更改它。窗口的技术也是一样的。
猜你喜欢
  • 2012-03-17
  • 2021-08-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多