ajax - 部分渲染冗余方法调用

标签 ajax jsf methods call

我知道 JSF 可能会调用托管 bean 方法几次,即使它在 .xhtml 中只调用一次。我知道这是由于 encode* 方法造成的。

我想请你给我解释一下下面的案例。 我有一个 JSF 文件,看起来像这样:

<h:form id="form1">
    <h:panelGroup id="output">
        ...
        <h:commandLink...>
            <f:ajax render=":form1:output"/>
        </h:commandLink>
    </h:panelGroup>
</h:form>

到目前为止一切顺利;按命令链接会重新呈现表单 panelGroup 中的页面的一部分。 代码如下:

<ui:repeat value="#{movieBean.categories}" var="category">
    <li>
        <h:outputLink value="index.xhtml">
            <f:param name="categoryId" value="#{category.categoryId}"/>
            <h:outputText value="#{category.description}"/>
        </h:outputLink>
    </li>
</ui:repeat>

#{movieBean.categories} //this is just a 'test line'

movieBean 是请求范围的。

现在,当我第一次进入该页面时,我收到了两次对 movieBean.categories 的调用。 这很清楚,因为它在代码中被调用了两次。但是,当我点击 AJAX 链接渲染时 只有页面的一部分(输出)我从 <ui:repeat> 得到了 movieBean.categories甚至再次打电话 尽管它在部分呈现的页面区域之外。这次没有调用'测试线'。

我进行了另一个测试。我删除了 <ui:repeat>标签只留下“测试线”。 AJAX 局部渲染不像以前那样调用它。

是什么让 <ui:repeat> 中的 movieBean.categories 调用标签不同 比“测试线”中的那个?还有为什么调用里面是<ui:repeat>按 AJAX 链接时生成 即使它在外面部分呈现<h:panelGroup id="output"/>标签?

最佳答案

我很确定“冗余”调用是在 JSF 重建元素树以将 POST 数据存储到适当元素的阶段内进行的。

因此,如果您停留在页面上,基本上每个请求都会有两个 getter 调用。第一个存储新的表单值,然后呈现页面内容。

关于ajax - 部分渲染冗余方法调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8535931/

相关文章:

javascript - 如何从 FormData 中删除值

javascript - 将 AJAX 响应放入 HTML 格式

jsf - 通过 p :fileUpload mode=advanced 上传文件时传递另一个输入组件的值

java - WELD-001408 不满足的依赖关系 - 找不到根本原因

javascript - 在方法之间传递 jQuery 元素数据?

javascript - AJAX 和 jQuery 的问题

javascript - 如何使用 AJAX 在 Javascript 中对 PHP 数组进行索引?

java - 如何在 JSF 输入字段中创建阴影

java - println 怎么可能在 void 方法中工作?

java - 使用 TestNG 和 Java 从另一个类调用方法