每行都有一个带h:selectOneMenu的数据表。我希望能够检索bean中selectOneMenu中选择的值。我正在使用richfaces a4j:support标签来对辅助bean进行AJAX调用。您可以看到以下代码:
public class MainMenu implements Scene {
Background background;
Hero hero;
Enemy enemy;
MenuButtons buttons
public mainMenu(Background background, Hero hero, Enemy enemy, MenuButtons buttons){
this.background = background;
this.hero = hero;
this.enemy = enemy;
this.buttons = buttons;
}
@Override
public void render(){
this.background.draw();
this.hero.draw();
this.enemy.draw();
this.mainMenuButtons.draw();
}
@Override
public void updateLogic(){
this.hero.move();
this.enemy.move();
this.mainMenubuttons.animate();
}
}
<t:dataTable id="datatable" var="row" value="#{myBean.dataTableRows}">
<h:selectOneMenu id="type" label="Type:" styleClass="tamanho80"
value="#{datatableHolder.selectedValue}" converter="comboConverter" immediate="true" >
<f:selectItem itemValue="#{null}" itemLabel="" />
<t:selectItems var="tp"
itemValue="#{tp}" itemLabel="#{tp.nome}"
value="#{row.comboTypeValues}" />
<f:attribute name="row" value="#{row}"/>
<a4j:support event="onchange" reRender="parent" actionListener="${myBean.executeAjax}" immediate="true" ajaxSingle="true" />
</h:selectOneMenu>
PS:
此问题已被确定为可能与this question重复,但事实并非如此。我的问题使用dataTable并且不对每个元素使用绑定。另外,我使用的是JSF 1.1和RichFaces 3.3.3。
答案 0 :(得分:4)
确定了问题:
t:selectItems标记生成的每个“选项”都带有项ID而不是索引,而comboConverter使用索引来选择项。因此,列表有12个项目(索引的范围应为0到11),但所选项目的ID为22。然后转换器将遍历列表到索引22并检索该元素。但是这个列表中没有这样的索引,因为最大值是12,然后转换器总是返回NULL。
对于这个问题,基本上有3种方法可以解决:
由于系统中的轻微影响,我选择了第一个。