如何通过 ajax 将迭代参数传递给支持 bean 方法
因此,我有一个如下所示的 dataTable:
<h:form>
<h:dataTable value="#{backingBean.employeeLineItems}" var="emp">
<h:column>
<f:facet name="header">First</f:facet>
#{emp.lastname}
</h:column>
<h:column>
<f:facet name="header">Last</f:facet>
#{emp.firstname}
</h:column>
<h:column>
<f:facet name="header">Actions</f:facet>
<h:commandButton value="View Details">
<f:ajax execute="#{setCurrentEmployeeId(emp.id)}" render="employeeDetails"/>
</h:commandButton>
</h:column>
</h:dataTable>
<h:outputText value="#{backingBean.employeeDetails}" id="employeeDetails"/>
</h:form>
对于数据表的每一行,都有一个按钮,单击该按钮时,将 employeeLineItem id 值 ajax 到在支持 bean 中设置该 id 的方法,然后呈现 id 为“employeeDetails”的outputText 标记(当然,getEmployeeDetails 方法将使用employeeLineItem id 从数据库获取正确的员工详细信息对象)
我的解决方案似乎不起作用,有谁知道我做错了什么?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
这是错误的。
的execute
属性应该指向一个空格分隔的组件客户端 ID 集合,这些 ID 将在服务器端提交和处理(同样的方式因为您使用空格分隔的组件客户端 ID 集合指定render
属性,这些 ID 将在 ajax 请求后更新/重新呈现)。在您的特定情况下,它应该是数据表或表单的 ID,或者只是@form
以一般引用父表单。您传递行 ID 的操作方法应在
的action
属性中定义。所以,应该这样做:(请注意,我修复了操作方法中缺少的托管 bean 名称)
顺便说一句,您是否知道也可以将整个对象作为 EL 中的参数传递?
这样您就不需要从数据库重新加载员工。
This is wrong. The
execute
attribute of<f:ajax>
should point to a space separated collection of component client IDs which are to be submitted and processed in the server side (the same way as you specify therender
attribute with a space separated collection of component client IDs which are to be updated/re-rendered after the ajax request). In your particular case, it should have been the ID of the datatable or the form, or just@form
to generically refer the parent form.The action method wherein you pass the row ID should be definied in the
action
attribute of the<h:commandButton>
instead. So, this should do:(note that I fixed the missing managed bean name in the action method)
By the way, are you aware that you can also just pass whole objects along as arguments in EL?
This way you don't need to reload the employee from the DB.