我在点击链接时调用了一种方法。以下代码可以正常工作
<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>
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试将参数传递给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>
Run Code Online (Sandbox Code Playgroud)
此代码有什么问题?
本<f:param>
必须是父母的孩子UICommand
组成部分,而不是<f:ajax>
。
<h:commandLink value="#{name.label}">
<f:param name="idx" value="#{idx}" />
<f:ajax listener="#{myBean.changeActiveName}" render="@all" />
</h:commandLink>
Run Code Online (Sandbox Code Playgroud)
(请注意,由于您的定义已经是默认设置,因此我删除了execute
和event
属性;再加上我想知道将整个IterationStatus
实例作为请求参数发送有何用处……也许您只是想发送索引而已?使用#{idx.index}
替代项)
<h:dataTable>
,完全相同的答案也适用<ui:repeat>
)