我正在单击链接时调用一个方法。以下代码可使用ajax方式运行
<ui:repeat value="#{myBean.names}" var="name"
varStatus="idx">
<li>
<h:commandLink value="#{name.label}">
<f:ajax execute="@this" event="click" render="@all" listener="#{myBean.changeActiveName}" >
</f:ajax>
</h:commandLink>
</li>
</ui:repeat>
但是当我尝试将参数传递给 Ajax 调用时,它开始刷新整个页面
<ui:repeat value="#{myBean.names}" var="name"
varStatus="idx">
<li>
<h:commandLink value="#{name.label}">
<f:ajax execute="@this" event="click" render="@all" listener="#{myBean.changeActiveName}" >
<f:param name="idx" value="#{idx}" />
</f:ajax>
</h:commandLink>
</li>
</ui:repeat>
这段代码有什么问题?
最佳答案
<f:param>
必须是 parent 的 child UICommand
组件,不属于 <f:ajax>
.
<h:commandLink value="#{name.label}">
<f:param name="idx" value="#{idx}" />
<f:ajax listener="#{myBean.changeActiveName}" render="@all" />
</h:commandLink>
(请注意,我删除了 execute
和 event
属性,因为您的定义已经是默认值;另外我想知道发送整个 IterationStatus
实例作为请求参数有什么用...也许您只是想发送索引?请使用 #{idx.index}
来代替)
另请参阅:
- How can I pass selected row to commandLink inside dataTable? (虽然这对待
<h:dataTable>
,但完全相同的答案也适用于<ui:repeat>
)
关于jsf-2 - :ajax doesn't work when parameters are passed using f:param,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11832607/