【发布时间】:2016-07-20 11:43:59
【问题描述】:
我将 JDeveloper 11.1.2.4 与 JSF 1.2 一起使用,并且遇到由 JSF selectItems 填充的 selectOneChoice 组件的问题。最初的问题是处理弹出窗口中的 selectOneChoice 组件,如果您单击下拉列表本身,它将获得焦点但列表不会填充,除非您单击页面上组件之外的任何位置。我通过将 ADF selectOneChoice 更改为 JSF selectOneMenu 并修复了它来解决这个问题。
这里的这个问题,我有一个 selectOneChoice,它不在弹出窗口中,而是在一个带有 valueChangeListener 的 JSPX 页面上。它最初所做的只是将 Long 变量设置为 newValue(被强制转换为 Long),然后调用填充列表的方法。
我添加了一个带有空检查的 if 语句,然后是一个嵌套的 if-else 检查值以禁用/启用按钮。所以现在发生的事情是我将单击下拉列表,选择一个值,然后正确填充/触发所有内容。如果我去尝试单击下拉列表以选择其他内容,则不会发生任何事情。它只是突出显示,我看到相同的值,直到我点击离开,然后再试一次,它就可以工作了。
我错过了什么?为什么我必须在组件外部单击才能触发它?
public void templateValueChangeListener(ValueChangeEvent valueChangeEvent) {
myTemplateId = (Long)valueChangeEvent.getNewValue();
if(myTemplateId != null){
if (myTemplateId == 7){
adminButton.setDisabled(true);
notAdminButton.setDisabled(false);
setIsAdminRole(true);
} else if (myTemplateId != 7){
adminButton.setDisabled(false);
notAdminButton.setDisabled(true);
setIsAdminRole(false);
}
}
fillTemplates();
fillAvailablePositions();
}
protected void fillTemplates()
{
List<ContainerTO> list = bigSession.getTheTemplates();
templateList = new ArrayList<SelectItem>();
for(ContainerTO tem : list)
templateList.add(new SelectItem(tem.getId(), tem.getValue()));
}
这里是 JSPX 代码
<af:selectOneChoice label="Templates:" value="#{AdminBean.myTemplateId}"
valueChangeListener="#{AdminBean.templateValueChangeListener}"
id="soc1"
autoSubmit="true" binding="#{AdminBean.roleTemplateDropDown}"
partialTriggers="cb11 cb10"
immediate="true">
<f:selectItems value="#{AdminBean.templateList}" id="si1"/>
</af:selectOneChoice>
谢谢
【问题讨论】:
标签: oracle-adf jsf-1.2