如何通过ajax将迭代参数传递给支持bean方法

时间:2011-10-31 15:51:46

标签: ajax jsf datatable

所以,我有一个看起来像这样的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值转换为在支持bean中设置该id的方法,然后呈现id为“employeeDetails”的outputText标记“(当然,getEmployeeDetails方法将使用employeeLineItem id从数据库中获取正确的员工详细信息对象)

我的解决方案似乎没有用,有谁知道我做错了什么?

1 个答案:

答案 0 :(得分:2)

<h:commandButton value="View Details"> 
   <f:ajax execute="#{setCurrentEmployeeId(emp.id)}" render="employeeDetails"/> 
</h:commandButton>

这是错误的。 execute的{​​{1}}属性应指向要在服务器端提交和处理的空间分隔的组件客户端ID集合(与指定<f:ajax>属性的方式相同空格分隔的组件客户端ID集合,在ajax请求之后要更新/重新呈现。在您的特定情况下,它应该是数据表或表单的ID,或者只是render通常引用父表单。

您应该在@form的{​​{1}}属性中定义传递行ID的操作方法。所以,这应该做:

action

(请注意,我在操作方法中修复了缺少的托管bean名称)

顺便提一下,您是否也知道您也可以将整个对象作为参数传递给EL?

<h:commandButton>

这样您就不需要从数据库重新加载员工了。