这必须是一个愚蠢的问题,但我似乎无法找到合适的谷歌搜索关键字:我有一个动作监听器,可以从多个复选框中的任何一个接收一个事件,这些复选框都是从同一行生成的在dataTable中的jsp。如何从动作监听器告诉哪一个发布了该事件?
特别是,我需要组件的索引,以便将其映射到模型中的有序列表。我知道我可以获取UIComponent对象,从那里我可以获得组件的客户端ID。并且知道客户端ID中嵌入了组件的索引,是的,我可以执行这个琐事,并从客户端ID解析索引。但我知道这将是一个可怕,脆弱和无法维护的黑客。
这样做的正确方法是什么?
答案 0 :(得分:1)
初步搜索后,我认为这可以帮到你。
http://illegalargumentexception.blogspot.com/2009/02/jsf-working-with-component-ids.html
除了复选框值之外,您是否尝试使用f:param来传递自定义参数,这样比使用ID操作业务逻辑更清晰。 ID。
答案 1 :(得分:0)
使用DataTables var
属性,您应该可以执行此操作
<h:dataTable ... var="currentRow">
....
<h:selectBooleanCheckbox ... actionListener="#{blah.doThis}">
<f:attribute name="curRec" value="#{currentRow}" />
</h:selectBooleanCheckbox>
豆:
public void doThis(ActionEvent ae)
{
TreeMap myMap = (TreeMap)ae.getComponent().getAttributes().get("curRec");
...
}
编辑:您的数据表的绑定变量应该具有方法getRowIndex();
。这应该为您提供导致表中事件的记录的索引。我正在引用一个ICEfaces项目,所以如果这不正确我会道歉。让我知道,thx。