我需要在从页面中已有的另一个下拉框中选择一个值时显示一个新的下拉框。第一个下拉列表已在页面中可用,第二个下拉列表将根据我从Bean类获得的布尔值隐藏。
问题是在刷新页面之前隐藏的下拉列表是不可见的。当我刷新页面时,只有我可以看到隐藏的下拉框。当我从第一个下拉框中取消选择另一个值时,应该隐藏第二个下拉列表,这也是正在发生的,但我必须刷新页面。
请参阅下面的代码以供参考:
instrumentDetails.xhtml
<!-- First drop down -->
<h:outputText id="product_Group"
value="#{msg.instrument_add_edit_product_group}" escape="false" />
<a4j:region>
<h:selectOneMenu
value="#{instrumentBean.instrumentData.productGroupId}"
valueChangeListener="#{instrumentBean.populateProductTypeByServiceProvider}"
style="width:140px" styleClass="dropDown">
<f:selectItem itemValue="0"
itemLabel="#{msg['gobal.select.default.label']}" />
<f:selectItems var="productGroupItem"
itemValue="#{productGroupItem.id}"
itemLabel="#{productGroupItem.label}"
value="#{referenceMaster.productGroupLabelKeyList}" />
<a4j:ajax event="valueChange" render="productTypeListInstrument,servList,showServiceId"
execute="@this" />
</h:selectOneMenu>
</a4j:region>
<!-- Second drop down -->
<a4j:outputPanel ajaxRendered="true" id ="showServiceId" rendered="#{instrumentBean.showService}">
<h:outputText id="serviceId" value="#{msg.instrument_add_edit_service}"
escape="false" />
<h:selectOneMenu value="#{instrumentBean.instrumentData.service}"
style="width:140px" styleClass="dropDown" >
<f:selectItem itemValue="0" itemLabel="Mobile" />
<f:selectItem itemValue="1" itemLabel="Telephone" />
<f:selectItem itemValue="2" itemLabel="ISDN BRI" />
</h:selectOneMenu>
</a4j:outputPanel>
InstrumentBean.java
private boolean showService;
public void populateProductTypeByServiceProvider(ValueChangeEvent event) {
try {
Integer rowindex = new Integer(event.getNewValue().toString());
if (!CommonUtil.isBlankInteger(instrumentData
.getServiceProviderId())
&& !CommonUtil.isBlankInteger(rowindex)) {
int productGroupId = rowindex.intValue();
List<LabelKeyTO> labelKeyTOList = findProductsByGroupAndServiceProvider(
productGroupId, instrumentData.getServiceProviderId());
Collections.sort(labelKeyTOList);
this.productTypeDetailList = labelKeyTOList;
setDefaultDetailsListSerRate();
defaultServiceTable();
} else {
if (CommonUtil.isBlankInteger(instrumentData
.getServiceProviderId())) {
this.instrumentData.setProductGroupId(0);
}
this.instrumentData.setProductTypeId(0);
setDefaultDetailsListProdSerRate();
defaultServiceTable();
}
if(rowindex == 1){
showService = true;
}else if(rowindex == 2){
showService = true;
}else{
showService = false;
}
} catch (Exception e) {
this.instrumentData.setProductTypeId(0);
setDefaultDetailsListProdSerRate();
defaultServiceTable();
String reasonFailure = e.getMessage();
validationMessage(reasonFailure, reasonFailure, reasonFailure,
FacesMessage.SEVERITY_ERROR);
}
}
答案 0 :(得分:0)
我是使用&#39;听众&#39;
完成的我已在侦听器的第一个下拉列表中添加了代码。请参阅下面的更新代码:
<!-- Product Group -->
<h:outputText id="product_Group"
value="#{msg.instrument_add_edit_product_group}" escape="false" />
<a4j:region>
<h:selectOneMenu
value="#{instrumentBean.instrumentData.productGroupId}"
valueChangeListener="#{instrumentBean.populateProductTypeByServiceProvider}"
style="width:140px" styleClass="dropDown" >
<f:selectItem itemValue="0"
itemLabel="#{msg['gobal.select.default.label']}" />
<f:selectItems var="productGroupItem"
itemValue="#{productGroupItem.id}"
itemLabel="#{productGroupItem.label}"
value="#{referenceMaster.productGroupLabelKeyList}" />
<a4j:ajax event="valueChange" render="productTypeListInstrument,servList" execute="@this" />
<a4j:ajax event="change" listener="#{instrumentBean.onChangeProductGroup}" />
</h:selectOneMenu>
</a4j:region>
感谢您的回答。