SelectOneChoice未填充selectItems值

时间:2016-03-31 20:35:06

标签: oracle-adf jsf-1.2

我使用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>

由于

2 个答案:

答案 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方法中的选择项。

感谢。