【问题标题】:SelectOneChoice not populating selectItems valueSelectOneChoice 未填充 selectItems 值
【发布时间】: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


    【解决方案1】:

    所以,我找到了答案。除了IDE和浏览器之外,与代码无关。在这里,我们使用 JDeveloper 11.1.2.4、JSF 1.2 ( -_- ) 并理解支持 IE 的要求。长话短说,我必须确保该应用程序可以与 IE8 一起使用,因为所使用的组件在 IE 8 兼容浏览器之外的任何其他设备中都被破坏了。在研究了所有内容之后,我有了一个 fantastic 的想法,在 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>
    

    【讨论】:

      【解决方案2】:

      您可以尝试从 fillTemplates() 到 getTemplateList() 的相同代码吗?

      尝试在 f:selectItems 的 getter 方法中填充选择项。

      谢谢。

      【讨论】:

      • 我试过了,但它做了同样的事情。当我单击页面中的其他位置时会发生什么?当我单击其他内容时,它实际上仅在第一次选择后加载。是再次初始化 bean 还是范围?当我将 SelectOneMenu 与 selectItems 一起使用时,它不会发生。它们都是 JSF 1.2。 SelectOneChoice 是 ADF 的 RichSelectOneChoice...它可以立即识别 ADF 组件,但我必须单击才能再次调用 JSF selectItems。
      猜你喜欢
      • 1970-01-01
      • 2012-12-18
      • 2016-07-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-03
      相关资源
      最近更新 更多