Redirect JSF2自动更新命令按钮';s使用inputText'重定向页面;s值

Redirect JSF2自动更新命令按钮';s使用inputText'重定向页面;s值,redirect,button,jsf-2,input,Redirect,Button,Jsf 2,Input,我在JSF页面中有一个inputText和一个commandButton。用户输入一些内容,然后在结果页面中被重定向,该页面还具有具有相同功能的inputText和commandButton。commandButton应该在单击时执行一些操作,并重定向到REST url(结果页面),该url是通过将inputText值附加到基本url中构建的。我尝试了很多东西,但在第二页我没有成功。到目前为止,我尝试的是: 在commandButton的操作中,我调用我的方法,然后返回重定向的URL,因为我的b

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

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

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

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

    只是不要渲染按钮。也许您在
    属性中使用了过于通用的客户端标识符,如
    @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中的侦听器,因为我猜只有在重新加载整个页面时才会激活它。