在JSF中,我们可以将HtmlDataTable
绑定到backing bean并获取行数据。但ui:repeat
甚至没有绑定属性。那么,我如何知道在ui:repeat
中点击了哪一行(元素)?
答案 0 :(得分: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>
与
private List<Item> items;
private Item item;
public void submit() {
System.out.println(item);
}
或者只是将动作方法放在迭代项目中
<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>
无论哪种情况,您都需要确保在后续请求中保留相同的items
。
顺便说一句,两种方式也适用于h:dataTable
。