使用JSF 1.2和Tomahawk更新数据表中selectOneMenu的值
有一个datatable(Tomahawk的datatable-),在这个datatable中有几个列,其中有一个下拉菜单(Tomahawk的selectOneMenu-)。当我选择一个下拉菜单时,其上有一个onchange属性,该属性触发ValueChangeListener(托管Bean中的一个方法)。我这样做是因为我希望第二个下拉菜单根据第一个菜单的值以友好方式加载。问题是,当我在数据表第一行的第一个菜单中选择一个值时,第二行的值会被加载,但如果我在第二行中选择相同的值,则下拉菜单不会触发ValueChangeListener。更糟糕的是:它没有保存第一个下拉菜单中的选定值。因此,ValueChangeListener仅在第一行中触发 我想要的是: -当同一行中的第一个下拉菜单选择新值时,要加载的数据表每行中的第二个下拉菜单 -重新加载/刷新页面时,将选定值保留在任何下拉菜单中 数据表: 页面示例如下:使用JSF 1.2和Tomahawk更新数据表中selectOneMenu的值,jsf,datatable,tomahawk,Jsf,Datatable,Tomahawk,有一个datatable(Tomahawk的datatable-),在这个datatable中有几个列,其中有一个下拉菜单(Tomahawk的selectOneMenu-)。当我选择一个下拉菜单时,其上有一个onchange属性,该属性触发ValueChangeListener(托管Bean中的一个方法)。我这样做是因为我希望第二个下拉菜单根据第一个菜单的值以友好方式加载。问题是,当我在数据表第一行的第一个菜单中选择一个值时,第二行的值会被加载,但如果我在第二行中选择相同的值,则下拉菜单不会触发
<t:dataTable id="tabAnAn" var="anls" value="#{mybean.analyze}"
rowClasses="even,odd"
columnClasses="center,center,left,center,center,center,center, center, center"
headerClass="hdmain"
styleClass="sz90" >
<t:column headerstyleClass="headercls">
<f:facet name="header">
<h:selectBooleanCheckbox id="js_masterSelect" value="#{mybean.markall}" />
</f:facet>
<h:selectBooleanCheckbox styleClass="js_selectable" value="#{anls.dstb}" />
</t:column>
<t:column headerstyleClass="headercls">
<f:facet name="header">#{label.excs}</f:facet>
<h:outputText value="#{anls.excs}" />
</t:column>
<t:column headerstyleClass="headercls">
<f:facet name="header">#{label.ente}</f:facet>
<h:outputText value="#{anls.nm}" />
</t:column>
<t:column headerstyleClass="headercls">
<f:facet name="header">#{label.tpdc}</f:facet>
<h:outputText value="#{anls.tpdcnm}" />
</t:column>
<t:column headerstyleClass="headercls">
<f:facet name="header">Type</f:facet>
<h:selectOneMenu id="typeX" label="Type:" styleClass="tm8"
value="#{anls.tipoAnaliseSelecionada}" converter="cmbcon"
onchange="submit()" immediate="true" valueChangeListener="#{mybean.callListener}" >
<f:selectItem itemValue="#{null}" itemLabel="" />
<t:selectItems var="typeX" itemValue="#{typeX}" itemLabel="#{typeX.nome}"
value="#{mybean.tiposAnalises}" />
<f:attribute name="thisAzy" value="#{anls}"/>
</h:selectOneMenu>
</t:column>
<t:column headerstyleClass="headercls">
<f:facet name="header">#{label.ps0n}</f:facet>
<h:selectOneMenu id="slctd" label="ps0n:" style="width:200px;"
value="#{anls.slctd}" converter="alzcon">
<f:selectItem itemValue="#{null}" itemLabel="" />
<t:selectItems var="az1n" itemValue="#{az1n}" itemLabel="#{az1n.usr.nm}"
value="#{anls.azixpo}" />
</h:selectOneMenu>
</t:column>
</t:dataTable>
public void callListener(ValueChangeEvent event){
FacesContext context = FacesContext.getCurrentInstance();
TpzAzy ta = (TpzAzy)event.getNewValue();
AnlDb ad = (AnlDb)event.getComponent().getAttributes().get("thisAzy");
ad.setAnlDbTpzAzy(ta);
if(mapType.containsKey(ta)){
ad.setAzyCand(mapType.get(ta));
} else {
ad.setAzyCand(this.svc.getAzy(ta));
this.mapType.put(ta, ad.getAzyCand());
}
this.showScreen = true;
context.renderResponse();
}