1

我通过按命令按钮使用数据表动态添加输入文本,但是每次添加行时页面都会刷新,如何在不使用 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>
4

1 回答 1

1

就应该是一项工作练习而言,发布任何接近答案的内容都会损害 OP 对该主题的理解。

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

  1. 您正在混淆Primefaces UI 组件,其标签以<p:...>标准JSF UI 组件开头<h:...>。关于你的例子,有<h:commandButton>and <p:commandButton>。至于 Primefaces 组件旨在为用户提供更方便的界面,在 Primefaces 对应的标准命令按钮中还有一些附加属性。发现它们并注意 AJAX 规范。仔细看看ajaxupdate属性。
  2. <f:ajax>UIComponent标签为实现ClientBehaviorHolder接口的 s 启用 ajax 行为。同样,<p:ajax>标签在一些增强方面基本相同,并被 Primefaces 组件使用。例如,可以在<h:commandButton>/内使用这些标签,<p:commandButton>并指定该组件的 ajax 行为。注意execute/render的属性<f:ajax>和 / 或process/update的属性<p:ajax>。这样命令按钮不会触发标准表单提交,但会触发 AJAX 调用。
  3. 请务必了解命令按钮的动作动作侦听器之间的区别。后者旨在执行一些小的调整(记录/访问调用者的属性/调整某些属性等),而前者用于执行业务操作(保存/删除/更新等)。优秀的开始是阅读 action 和 actionListener 之间的差异。

最后,请确保不要混淆代码中的输入和输出组件。

最后,咨询一个好的信息来源是一个非常好的主意。您可以从官方文档(Primefaces 文档Oracle 关于 Java EE 6 的教程)开始,然后继续使用可靠的信息来源。我的个人偏好转到以下(出色的)来源:BalusC 教程一般 Java EE 和 JSF 特别是Marty Hall 的关于 Java 中广泛主题的教程和Mkyong 的教程,涵盖了 Java EE 中的具体问题,以备不时之需一个具体的例子。

于 2013-03-02T09:43:46.313 回答