当前位置: 首页 > 面试题库 >

JSF ViewParam必需+ AJAX中断页面

满俊楠
2023-03-14
问题内容

当我单击下面页面上的命令按钮时,导航失败。(单击按钮将刷新页面,删除URL参数并显示所需的错误消息,而不是导航到索引页面)

但是,如果我删除了必需的属性,或者我删除了f:ajax标记,则导航工作正常。

使用com.sun.faces JSF 2.1.13和primefaces 3.4。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:ui="http://java.sun.com/jsf/facelets">

<h:head></h:head>

 <f:metadata>
        <f:viewParam name="product"
            required="true" requiredMessage="Bad request. Please use a link from within the system."/>
    </f:metadata>

<body>

    <h:form id="form">
        <h:selectBooleanCheckbox>
            <f:ajax update="form" />
        </h:selectBooleanCheckbox>
        <h:commandButton value="buy" action="/index.xhtml?faces-redirect=true" />
    </h:form>

</body>
</html>

问题答案:

我将假设,这update="form"是一个粗心的过分简化,并且您实际上打算将render="@form"其与PrimeFaces左右使用并混淆。

回到具体的问题,这是由执行非ajax回发引起的,该回发也触发了视图参数的处理。

要么仅在非回发上使它成为必需(不过请确保该bean在视图作用域内),

<f:viewParam ... required="#{not facesContext.postback}" />

或也将其通过回发

<h:commandButton ...>
    <f:param name="product" value="#{bean.product}" />
</h:commandButton>

或者如果您已经在使用视图作用域的bean,请改用OmniFaces<o:viewParam>。它不会在回发时处理view参数。

<... xmlns:o="http://omnifaces.org/ui">
...
<o:viewParam ... />


 类似资料:
  • 我已经为我的城市选项卡创建了ajax代码,以显示来自ajax的相应城市数据。 我使用了以下代码: 下面是我要在ajax内容上加载的div 现在我已经使用以下jquery插件对我的项目进行分页http://cssglobe.com/post/9801/easy-paginate-jQuery-plugin-for-pagination 但是当我在ajax响应中使用它时,分页不起作用。 你能帮我一下我

  • 我们有了一个有View和Page的应用结构,现在我们需要理解如何创建新的Page,以及Framework7是如何加载他们的。 下面有两个重要的地方请注意:p 默认情况下 Framework7 会使用 Ajax 加载所有的页面,除了带有 external class的链接(<a href="somepage.html" class="external">)和没有正确 href 值的链接(比如是空的或

  • 和(表单验证)有什么区别?

  • 我想打破页面,而转换HTML到PDF使用iText7。

  • 问题内容: 我正在使用Eclipse for Java Develepers(在Windows 7上运行的Juno x64)。 我有一个项目正在尝试不再需要的jar(args4j),因此删除了依赖项。在某个时候,我的PC意外断电,从那以后,我重新启动了Eclipse。 我的项目现在有一个错误。在删除依赖项而没有任何问题之后,我在该项目上工作了一段时间。 在“项目属性”>“ Java构建路径”下,任

  • 问题内容: 在我的Web应用程序中,我对表单字段使用了一些自定义验证。在同一个表单中,我有两个按钮:一个用于实际提交表单,另一个用于取消/重置表单。 通常,我使用Safari作为默认浏览器。现在Safari5退出了,突然我的“取消/重置”按钮不再起作用了。每次按下重置按钮时,表单中的第一个字段都会获得焦点。但是,这与我的自定义表单验证相同。在其他浏览器上尝试时,一切都很好。我必须是Safari 5