Ajax Fehler zur Laufzeit

mario87b

Aktives Mitglied
Hallo.

Ich habe ein SelectOneMenu.

Code:
<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 ;-)

fehler.JPG
 
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.

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

Code:
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?!
 
Zuletzt bearbeitet:
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
h😱utputLabel 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 h😱utput 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
 
Zuletzt bearbeitet:
Also in der Deklaration steht:

Code:
<?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...
 
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
 
Zuletzt bearbeitet:

Zurück
Oben