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>