我使用JDeveloper 11.1.2.4和JSF 1.2,并且遇到了由JSF selectItems填充的selectOneChoice组件的问题。最初的问题是处理弹出窗口中的selectOneChoice组件,如果你点击下拉列表本身,它会收到焦点但列表不会填充,除非你点击页面上任何位置,在组件外面。我通过从ADF selectOneChoice更改为JSF selectOneMenu并修复它来解决这个问题。
这个问题,我有一个selectOneChoice不在弹出窗口中,而是在JSPX页面上有一个valueChangeListener。它最初所做的只是将一个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>
由于
答案 0 :(得分:1)
所以,我找到了答案。除了IDE和浏览器之外,根本没有与代码有关。在这里,我们使用JDeveloper 11.1.2.4,JSF 1.2(-_-)以及支持IE的理解要求。简而言之,我必须确保该应用程序适用于IE8,因为除了IE 8兼容的浏览器之外,所使用的组件都被破坏了。在研究了所有内容之后,我有了梦幻般的想法在Chrome中试用它......它有效。因此,我重新调查了我的调查。
我强迫meta将IE浏览器识别为IE7然后我在web.xml中禁用了兼容性警告以消除烦恼。到现在为止还挺好。这只是一个现在的解决方法。我们将尽快转到JDeveloper 12c和JSF 2。
强制使用IE7模式:
<context-param>
<param-name>User-Agent</param-name>
<param-value>Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1;</param-value>
</context-param>
取消浏览器兼容性提醒:
<context-param>
<param-name>oracle.adf.view.rich.HIDE_UNSUPPORTED_BROWSER_ALERTS</param-name>
<param-value>IECompatibilityModes</param-value>
</context-param>
答案 1 :(得分:0)
您可以尝试将fillTemplates()中的相同代码添加到getTemplateList()。
尝试填充f:selectItems的getter方法中的选择项。
感谢。