我通过按下命令按钮使用数据表动态添加输入文本,但每次添加行时页面都会刷新如何在数据表中添加行而不使用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>
答案 0 :(得分:1)
只要它应该是工作练习,发布任何接近答案的内容都会损害OP对该主题的理解。
所以,我会提供一些提示,以便OP可以自己解决问题。
<p:...>
和标准 JSF UI组件<h:...>
开头。关于您的示例,有<h:commandButton>
和<p:commandButton>
。至于Primefaces组件旨在为用户提供更方便的界面,在标准命令按钮的Primefaces中有一些附加属性。发现它们并注意AJAX规范。仔细查看ajax
和update
属性。<f:ajax>
标记为实现UIComponent
接口的ClientBehaviorHolder
启用了ajax行为。类似地,<p:ajax>
标记与一些增强功能基本相同,并由Primefaces组件使用。例如,可以在<h:commandButton>
/ <p:commandButton>
内对这些标记进行批处理,并指定该组件的ajax行为。请注意execute
的{{1}} / render
属性和<f:ajax>
的{{1}} / process
属性。这样,命令按钮不会触发标准表单提交,但会触发AJAX调用。最后,请确保不要在代码中混淆输入和输出组件。
最后,咨询良好的信息来源是一个非常好的主意。您可以从官方文档(Primefaces documentation,Oracle's tutorial on Java EE 6)开始,然后继续 可靠的信息来源 。我个人的偏好来自以下(精彩)来源:BalusC tutorials on Java EE in general and JSF in particular,Marty Hall's tutorials on a wide spectrum of subjects within Java和Mkyong's tutorials, covering concrete problems within Java EE,以防您想要一个具体的例子。