我怎么知道在ui中点击了哪个元素:重复?

TCM*_*TCM 2 jsf facelets

在JSF中,我们可以绑定HtmlDataTable到backing bean并获取行数据.但是ui:repeat甚至没有绑定属性.那么,我怎么知道点击了哪一行(元素)ui:repeat

Bal*_*usC 8

要么使用 f:setPropertyActionListener

<h:form>
    <ui:repeat value="#{bean.items}" var="item">
        <h:outputText value="#{item.value}">
        <h:commandButton value="submit" action="#{bean.submit}">
            <f:setPropertyActionListener target="#{bean.item}" value="#{item}"/>
        </h:commandButton>
    </ui:repeat>
</h:form>
Run Code Online (Sandbox Code Playgroud)

private List<Item> items;
private Item item;

public void submit() {
    System.out.println(item);
}
Run Code Online (Sandbox Code Playgroud)

或者只是将动作方法放在迭代项中

<h:form>
    <ui:repeat value="#{bean.items}" var="item">
        <h:outputText value="#{item.value}">
        <h:commandButton value="submit" action="#{item.submit}" />
    </ui:repeat>
</h:form>
Run Code Online (Sandbox Code Playgroud)

无论哪种情况,您都需要确保items在后续请求中保留相同的内容.

顺便说一下,这两种方式也适用于h:dataTable.