ajax - 使用 AJAX 的 JSF 表单发布

标签 ajax jsf-2

我希望以下表单使用 AJAX。因此,单击命令按钮后会显示评论,而无需重新加载页面。使用 Java Server Faces 2.0 需要更改哪些内容?

功能:此表单提供一个输入文本来定义主题。按下命令按钮后,将搜索有关该主题的评论。注释显示在数据表中(如果有)。否则会显示

<h:form id="myForm">
    <h:outputLabel value="Topic:" for="topic" />
    <h:inputText id="topic" value="#{commentManager.topic}" />
    <h:commandButton value="read" action="#{commentManager.findByTopic}" />
    <h:panelGroup rendered="#{empty commentManager.comments}">
        <h:outputText value="Empty" />
    </h:panelGroup>
    <h:dataTable
        id="comments"
        value="#{commentManager.comments}"
        var="comment"
        rendered="#{not empty commentManager.comments}"
    >
        <h:column>
            <h:outputText value="#{comment.content}"/>
        </h:column>
    </h:dataTable>
</h:form>

最佳答案

您需要告诉命令按钮使用 Ajax。就像嵌套 <f:ajax> 一样简单里面有标签。您需要通过execute="@form"指示它提交整个表单。并渲染 ID 为 comments 的元素通过render="comments" .

<h:commandButton value="read" action="#{commentManager.findByTopic}">
    <f:ajax execute="@form" render="comments" />
</h:commandButton>

不要忘记确保您有 <h:head>而不是<head>在主模板中,以便自动包含必要的 JSF ajax JavaScript。

<h:head>
    ...
</h:head>

此外,ID 为 comments 的元素需要由 JSF 已经渲染到客户端,以便能够再次由 JavaScript/Ajax 更新(重新渲染)。所以最好是输入<h:dataTable><h:panelGroup>使用该 ID。

<h:panelGroup id="comments">
    <h:dataTable rendered="#{not empty commentManager.comments}">
        ...
    </h:dataTable>
</h:panelGroup>

另请参阅:

关于ajax - 使用 AJAX 的 JSF 表单发布,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6472016/

相关文章:

JavaScript 代码使外部网站弹出

javascript - jQuery - 如何在引号中包围 Ajax 加载的元素?

c# - 将动态生成的 javascript 保存到 html 文件中或将此内容放入字符串中并发送给 Controller

javascript - AJAX 请求未被识别

java - JSF 2.0 - 即使第一个 validator 失败也会调用第二个 validator

jsf - 无法让 MenuItem 调用其 ActionListeners

jquery - 在express服务器上使用jquery发布json

java - JSF 2.0 和 TransformerFactory

java - 似乎无法弄清楚如何使用 primefaces 重定向到 .xhtml

java - 如何在 WAR 文件之间在 JSF 页面中导航?