【问题标题】:JSF2 Auto update commandButton's redirect page with inputText's valueJSF2 使用 inputText 的值自动更新 commandButton 的重定向页面
【发布时间】:2012-06-13 06:12:21
【问题描述】:

我在 JSF 页面中有一个 inputText 和一个 commandButton。用户输入一些内容,然后在结果页面中被重定向,该页面也具有具有相同功能的 inputText 和 commandButton。 commandButton 应该在单击并重定向到 REST url(结果页面)时执行一些操作,该 REST url 是通过将 inputText 值附加到基本 URL 来构建的。我尝试了很多东西,但我没有设法在第二页中完成这项工作。到目前为止我尝试的是:

  1. 在 commandButton 的操作中,我调用我的方法,然后返回重定向的 URL,因为我的 bean 中有 inputText 值。我使用 AJAX 在 keyup 事件上呈现 commandButton。这适用于第 1 页,但不适用于第 2 页。问题是每次用户键入一个字母时,都会呈现按钮并调用我不想要的方法,因为我只想在用户单击按钮时调用它们.

  2. 我在我的 bean 中创建了一个方法,我将所有方法都放入其中。我尝试创建 PostConstruct 方法并使用 preRenderView 使用 f:event 来调用该方法。同样,对于 AJAX,这不起作用,因为每次用户键入内容时都会调用该方法。

【问题讨论】:

    标签: redirect button jsf-2 input


    【解决方案1】:

    问题是每次用户键入一个字母时,都会呈现按钮并调用我不想要的方法,因为我只想在用户单击按钮时调用它们。

    然后不要渲染按钮。也许您在<f:ajax render> 属性中使用了过于笼统的客户端标识符,例如@form。只需将其替换为不包括按钮的更具体的内容。


    再次使用 AJAX,这不起作用,因为每次用户键入内容时都会调用该方法。

    只需检查它是否不是 ajax 请求。

    if (!FacesContext.getCurrentInstance().getPartialViewContext().isAjaxRequest()) { 
        // Not an ajax request.
    }
    

    【讨论】:

    • 但我认为我必须呈现按钮,否则操作重定向 URL 将不会附加带有 inputText 的 URL,因为这将在页面呈现之前被评估一次。到现在为止,我只能渲染按钮。您的第二个建议似乎确实有效。我将它与 preRenderView 结合起来,似乎在刷新页面时调用了该方法,但在 ajax 重新呈现按钮以放置新值时没有调用该方法。不过这很奇怪,因为这意味着 ajax 调用会重新渲染视图。
    • 为什么ajax调用不应该向JSF发送任何HTTP请求?为什么 ajax 调用不应该重新渲染视图? ajax 调用还应该如何获得响应?
    • 我的意思是我猜只有指定的元素会被 ajax 重新渲染,并且这不会影响 preRenderView 中的侦听器,因为我猜它只是被激活当整个页面重新加载时。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-18
    • 2018-03-16
    • 2015-04-29
    • 2013-02-12
    相关资源
    最近更新 更多