2016-03-31 29 views
0

Ich verwende JDeveloper 11.1.2.4 mit JSF 1.2 und habe Probleme mit den selectOneChoice-Komponenten, die von JSF selectItems aufgefüllt werden. Anfänglich ging es um die selectOneChoice-Komponenten in Popups. Wenn Sie auf das Dropdown-Menü selbst klicken, erhält es zwar den Fokus, aber die Liste wird nicht gefüllt, wenn Sie nicht irgendwo auf der Seite außerhalb der Komponente geklickt haben. Ich habe das behoben, indem ich von einem ADF selectOneChoice zu einem JSF selectOneMenu wechselte und das reparierte.SelectOneChoice füllt den Wert selectItems nicht

Dieses Problem hier, ich habe eine selectOneChoice, die nicht in einem Popup ist, sondern auf einer JSPX-Seite, die einen ValueChangeListener darauf hat. Alles, was anfänglich getan wurde, war eine Long-Variable für den newValue (der in Long umgewandelt wird) und dann die Methode, die die Liste füllt.

Ich habe eine if-Anweisung mit einem Null-Check hinzugefügt, dann ein verschachteltes if-else, das Werte zum Deaktivieren/Aktivieren von Schaltflächen überprüft. Was nun passiert, ist, dass ich auf das Drop-down-Menü klicke, einen Wert auswähle und alles korrekt ausgefüllt/ausgelöst wird. Wenn ich versuche, auf das Dropdown-Menü zu klicken, um etwas anderes auszuwählen, passiert nichts. Es hebt nur hervor und ich sehe den gleichen Wert, bis ich wegklicke und es dann nochmal versuche und es funktioniert.

Was fehlt mir? Warum muss ich außerhalb der Komponente klicken, damit sie ausgelöst wird?

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())); 
} 

und hier ist der JSPX Code

<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> 

Dank

Antwort

1

Also, ich habe meine Antwort gefunden. Hatte nichts mit dem Code zu tun, außer der IDE und dem Browser. Hier verwenden wir JDeveloper 11.1.2.4, JSF 1.2 (-_-) mit einer verständlichen Anforderung, IE zu unterstützen. Lange Rede, kurzer Sinn, ich muss sicherstellen, dass die App mit IE8 funktioniert, da die verwendeten Komponenten in nichts anderem als einem IE 8-kompatiblen Browser zerbrochen sind. Nachdem ich alles erforscht hatte, hatte ich die fantastische Idee, es in Chrome auszuprobieren ... und es funktionierte. Also habe ich meine Untersuchung umgeleitet.

Ich zwang die Meta, den IE-Browser als IE7 zu erkennen, dann unterdrückte ich die Kompatibilitätswarnung in web.xml, um den Ärger wegzubekommen. So weit, ist es gut. Dies ist nur ein Problem für jetzt. Wir werden so bald wie möglich zu JDeveloper 12c und JSF 2 wechseln.

Um den IE7-Modus zu erzwingen:

<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> 

die Browser-Kompatibilität Warnungen zu unterdrücken:

<context-param> 
    <param-name>oracle.adf.view.rich.HIDE_UNSUPPORTED_BROWSER_ALERTS</param-name> 
    <param-value>IECompatibilityModes</param-value> 
    </context-param> 
0

Können Sie den gleichen Code aus fillTemplates versuchen() zu getTemplateList().

Versuchen Sie, die Auswahlelemente in der Getter-Methode von f: selectItems zu füllen.

Danke.

+0

ich versuchte, aber es hat die gleiche Sache. Was passiert, wenn ich irgendwo anders auf der Seite klicke? Es lädt wirklich erst nach der ersten Auswahl, wenn ich etwas anderes anklicke. Wird die Bean wieder initialisiert oder ein Bereich? Es passiert nicht, wenn ich das SelectOneMenu mit den SelectItems verwende. Sie sind beide JSF 1.2. Die SelectOneChoice ist ADFs RichSelectOneChoice ... es erkennt die ADF-Komponente gleich, aber ich muss klicken, um die JSF selectItems erneut aufzurufen. – EatSleepLearnRepeat