SelectOneChoice 不填充 selectItems 值
SelectOneChoice not populating selectItems value
我将 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,用于检查 disable/enable 按钮的值。所以现在发生的是我将单击下拉菜单,select 一个值,然后一切都是 populated/triggered 正确。如果我去尝试单击下拉菜单到 select 其他东西,什么也没有发生。它只是突出显示并且我看到了相同的值,直到我点击离开然后重试并且它有效。
我错过了什么?为什么我必须在组件外部单击才能触发?
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>
谢谢
你能试试从 fillTemplates() 到 getTemplateList() 的相同代码吗?
尝试在 f:selectItems 的 getter 方法中填充 select 项。
谢谢。
所以,我找到了答案。除了 IDE 和浏览器之外,与代码完全无关。在这里,我们使用 JDeveloper 11.1.2.4、JSF 1.2 ( -_- ) 以及支持 IE 的明确要求。长话短说,我必须确保该应用程序适用于 IE8,因为所使用的组件在 IE 8 兼容浏览器以外的任何浏览器中都已损坏。在研究了所有内容之后,我有了 绝妙的 想法,可以在 Chrome 中进行尝试...并且成功了。因此,我重新安排了调查。
我强制元将 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>
我将 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,用于检查 disable/enable 按钮的值。所以现在发生的是我将单击下拉菜单,select 一个值,然后一切都是 populated/triggered 正确。如果我去尝试单击下拉菜单到 select 其他东西,什么也没有发生。它只是突出显示并且我看到了相同的值,直到我点击离开然后重试并且它有效。
我错过了什么?为什么我必须在组件外部单击才能触发?
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>
谢谢
你能试试从 fillTemplates() 到 getTemplateList() 的相同代码吗?
尝试在 f:selectItems 的 getter 方法中填充 select 项。
谢谢。
所以,我找到了答案。除了 IDE 和浏览器之外,与代码完全无关。在这里,我们使用 JDeveloper 11.1.2.4、JSF 1.2 ( -_- ) 以及支持 IE 的明确要求。长话短说,我必须确保该应用程序适用于 IE8,因为所使用的组件在 IE 8 兼容浏览器以外的任何浏览器中都已损坏。在研究了所有内容之后,我有了 绝妙的 想法,可以在 Chrome 中进行尝试...并且成功了。因此,我重新安排了调查。
我强制元将 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>