如何使用ajax更新JSF数据表

时间:2013-03-02 07:51:20

标签: ajax jsf-2 primefaces

我通过按下命令按钮使用数据表动态添加输入文本,但每次添加行时页面都会刷新如何在数据表中添加行而不使用ajax刷新页面。这是代码

<h:form>

    <h:dataTable id="table" value="#{dataTableBean.cities}" var="city">
        <h:column>
            <f:facet name="header">
                <h:outputText value="City name" />
            </f:facet>
            <h:inputText value="#{city}" />
        </h:column>
    </h:dataTable>

    <h:commandButton value="Add one more city" id="ajax" update="table"
        actionListener="#{dataTableBean.enlargeList}" />
    <h:commandButton value="Submit" actionListener="#{dataTableBean.processList}" />
</h:form>

1 个答案:

答案 0 :(得分:1)

只要它应该是工作练习,发布任何接近答案的内容都会损害OP对该主题的理解。

所以,我会提供一些提示,以便OP可以自己解决问题。

  1. 您感到困惑的是 Primefaces UI组件,其标签以<p:...>和标准 JSF UI组件<h:...>开头。关于您的示例,有<h:commandButton><p:commandButton>。至于Primefaces组件旨在为用户提供更方便的界面,在标准命令按钮的Primefaces中有一些附加属性。发现它们并注意AJAX规范。仔细查看ajaxupdate属性。
  2. <f:ajax>标记为实现UIComponent接口的ClientBehaviorHolder启用了ajax行为。类似地,<p:ajax>标记与一些增强功能基本相同,并由Primefaces组件使用。例如,可以在<h:commandButton> / <p:commandButton>内对这些标记进行批处理,并指定该组件的ajax行为。请注意execute的{​​{1}} / render属性和<f:ajax>的{​​{1}} / process属性。这样,命令按钮不会触发标准表单提交,但会触发AJAX调用。
  3. 请务必了解命令按钮的操作操作侦听器之间的区别。后者旨在执行一些次要调整(记录/访问调用者的属性/调整某些属性等),而前者用于执行业务操作(保存/删除/更新等)。优秀的开始是阅读Differences between action and actionListener
  4. 最后,请确保不要在代码中混淆输入和输出组件

    最后,咨询良好的信息来源是一个非常好的主意。您可以从官方文档(Primefaces documentationOracle's tutorial on Java EE 6)开始,然后继续 可靠的信息来源 。我个人的偏好来自以下(精彩)来源:BalusC tutorials on Java EE in general and JSF in particularMarty Hall's tutorials on a wide spectrum of subjects within JavaMkyong's tutorials, covering concrete problems within Java EE,以防您想要一个具体的例子。