所以,我有一个看起来像这样的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从数据库中获取正确的员工详细信息对象)
我的解决方案似乎没有用,有谁知道我做错了什么?
答案 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>
这样您就不需要从数据库重新加载员工了。