# Ajax Fehler zur Laufzeit



## mario87b (4. Sep 2013)

Hallo.

Ich habe ein SelectOneMenu.


```
<h:outputText value="Kategorie wählen:" ></h:outputText>
<h:selectOneMenu id="selcat" label="Kategorie" valueChangeListener="#{formsBean.newFormsDataSet()}" value="#{formsBean.selectedCategoryItem}" >
<f:selectItem itemLabel="Kategorie zuordnen" />
<f:selectItems value="#{formsBean.selectCategoryItems}" var="c" itemLabel="#{c.category}" />
                            <f:converter converterId="SelectOneMenuConverter" />
</h:selectOneMenu>
```

Soweit so gut. Wenn ich dann Ausführe bekomme ich von Browser (FireFox) diese Fehlermeldung und google hilft nicht weiter ;-)


----------



## Lit-Web (4. Sep 2013)

Müsste das nicht hutputLabel anstatt hutputText heißen?


----------



## mario87b (4. Sep 2013)

Label oder Text ist in dem Fall glaub ich egal. Der Fehler ist mir immer noch nicht klar, aber...

Ich hab mir nochmal eine extra Anwendung geschrieben nur für Test mit OneSelectMenu und Ajax.

Was ich nun auch jeden Fall herausgefunden habe ist, dass wenn ich einen Converter mit ins Spiel bringe (was ich wegen der Zuordung von Objekten anders als String ja muss), dann wird der Listener nicht mehr ausgeführt.


```
<h:outputText id="result" value="#{myManagedBean.outp}" />
                <p:selectOneMenu id="test1" value="#{myManagedBean.selectedItem}" >
                    <f:selectItems value="#{myManagedBean.selectItems}" var="i" itemLabel="#{i.name}" itemValue="#{i.id}" />
                    <p:ajax update="result" listener="#{myManagedBean.myListener}" />
                    <f:converter converterId="MenuConverter" />
                </p:selectOneMenu>
```


```
public class ProjectConverter implements Converter {
    
    @Override
    public Object getAsObject(FacesContext context, UIComponent component, String value) {
        
    MyManagedBean mb = (MyManagedBean)context.getELContext().getELResolver().getValue(context.getELContext(), null, "myManagedBean");
    
        
    Object ret = null;
      
      if ( mb != null ) {
        
        int id = Integer.parseInt(value);
        
        if ( mb.getSelectItems() != null ) {
            for ( Data d : (List<Data>)mb.getSelectItems() ) {
                if ( id == d.getId() ) {
                    ret = d;
                    break;
                }
            }
        }
      }
      
        
         return ret;
        
    }

    @Override
    public String getAsString(FacesContext context, UIComponent component, Object value) {
        String ret = "";
        
        if ( value instanceof Integer ) {
            ret = "" + value;
        }
        
    return ret;    
    }
}
```

Das ist ein anderes Problem, aber für mich auch relevant?!


----------



## sence (4. Sep 2013)

Im ersten Fall wird Dir mitgeteilt, dass in der ersten Zeile, erstes Zeichen ein Fehlerhaftes Zeichen in deiner xhtml Deklaration enthalten ist.
Müsste vorm Doctype sein, so wie Firefox es zeigt ist es das ^ Symbol.

Wenn deine xhtml Deklaration sauber ist, schau mal ob das, was durch ajax aktualisiert wird, eventuell einen Code beinhaltet.

@Lit-Web
hutputLabel wird in Verbindung mit Eingabekomponenten eingesetz.
Somit wäre deine Aussage richtig, die Frage ist ledeglich die Darstellungsfrage.
outputLabel erzeugt ein html Label Element, wohin gegeben hutput kein html Element repräsentiert.

zu deinem 2. Problem:
>> dann wird der Listener nicht mehr ausgeführt.
Der Listener wird auch mit aktivem Converter ausgeführt, dieser hat nichts direkt mit dem Converter zu tun.

Schaue bitte mal in die Logdateien, ob eine Exception geworfen wird. (ggf. Bean im falschen Scope oder oder oder 
hier kann ich ohne Exception nur raten.

VG


----------



## mario87b (5. Sep 2013)

Also in der Deklaration steht:


```
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
```

Sollte also passen.



Zum Ajax.
Ich lass es sein, habs erstmal aufgegeben. Dann läd der Client halt die ganze Seite nochmal...


----------



## sence (9. Sep 2013)

Hattest du HTML Code ausgegeben oder einfachen Text? (nach der Auswahl in der selectOneMenu Komponente)
( ggf. html code nicht escaped ?)

Einfach abzustempeln ist zwar ne Lösung 
aber zu wissen woran es liegt ist vom Vorteil, wenn man es braucht und keine Zeit hat (Projekt Druck)

VG


----------

