javax.el.PropertyNotWritableException: Illegale Syntax für den Set-Vorgang

8

Ich mache in JSF ein Projekt zur Schule und habe damit wenig Probleme.

Zunächst funktioniert der h: commandButton nicht richtig, wenn ich mich durch Drücken auf eine andere Seite des Projekts umleiten will. Es wurde ein Fehler angezeigt:

javax.el.PropertyNotWritableException: Unzulässige Syntax für Set Operation

index.jsp:

%Vor%

ProducentBean.java:

%Vor%

Ich habe versucht, es auf viele Arten zu tun, aber ich kann damit nicht umgehen.

Ich habe noch eine andere Frage: Gibt es in JSF eine Möglichkeit, eine Tabelle dynamisch aus der Datenbank anzuzeigen, z. B. indem Sie einen Tabellennamen auswählen und eine Option in? Meine Datenbank enthält drei Tabellen mit unterschiedlicher Anzahl von Spalten.

Ich werde sehr glücklich sein, wenn mir jemand Ratschläge gibt.

BEARBEITEN:

OK, ich habe das versucht:

%Vor%

und in index.jsp:

%Vor%

Es gibt mir immer noch den gleichen Fehler.

EDIT2:

Stapelverfolgung:

%Vor%     
smiechu_skce 26.01.2013, 18:32
quelle

3 Antworten

17

Sehen Sie sich den Stack-Trace an. Hier ist der wichtigste Teil:

%Vor%

Lesen Sie von unten nach oben. Während der Aktualisierung der Modellwertephase durchläuft JSF den Komponentenbaum beginnend mit UIViewRoot component ( <f:view> ). In einer UIForm -Komponente ( <h:form> ) gibt es eine UIData -Komponente ( <h:dataTable> ) mit einer UIInput -Komponente ( <h:inputText> ), die verarbeitet werden muss. Der updateModel() muss den übergebenen, konvertierten und validierten Wert im Grunde in das Modell (die gemanagte Bean) schreiben. Diese Operation ist jedoch fehlgeschlagen, da die Eigenschaft nicht beschreibbar ist (d. H. Die Setter-Methode kann nicht anhand der EL-Ausdruckssyntax gefunden werden).

Nun, schauen wir uns die Eigenschaften Ihrer <h:inputText> Komponenten im Allgemeinen an.

%Vor%

Warte, das ist seltsam. Sie beginnen alle mit "bekommen"! Das ist definitiv nicht normal. JSF sucht dann nach Methoden wie setGetId() , setGetNazwa() , usw., die einfach keinen Sinn ergeben (und Sie haben wahrscheinlich auch nicht, angesichts dieser Ausnahme). Es wird erwartet, dass sie konkrete Eigenschaftsnamen wie "id", "nazwa", "nip" usw. und nicht vollständige Methodennamen darstellen.

Also, so im Modell:

%Vor%

Und so in der Ansicht:

%Vor%

Dies ist jedoch bereits in einem bisschen vernünftigen JSF Buch / Tutorial / Ressource abgedeckt. Bist du absolut sicher, dass du den richtigen gelesen hast? Ihre Frage zeigt auch, dass Sie JSF 2.0 in Kombination mit der veralteten JSP-Ansichtstechnologie anstelle der Nachfolger-Facelets verwenden. Beginnen Sie bei unserer JSF Wiki-Seite .

    
BalusC 26.01.2013, 20:57
quelle
3

Sie haben hier einige Probleme. Erstens haben Sie in Ihren Eingabekomponenten Werte wie p.getId . In Ihrer Bean haben Sie wahrscheinlich Methoden namens getId und setId , aber das bedeutet, dass Sie eine Eigenschaft namens id haben, die Sie lesen und schreiben können. Ändern Sie Ihre Werte in: p.id , p.nazwa , p.nip ... Sie können sehen, dass ich alle unteren Buchstaben verwende, nicht ID , sondern id .

Zweitens sollten Sie Ihre Aktionsmethode auf etwas wie diese ändern (wenn Sie umleiten möchten):

%Vor%

und Befehlstaste für etwas wie folgt:

%Vor%     
partlov 26.01.2013 20:28
quelle
-1

Geben Sie nicht die () in Ihrer Befehlsschaltfläche ein. Geben Sie in Ihrer Bean-Methode eine Zeichenfolge zurück und verwenden Sie die Navigation, um zu einer anderen Seite zu wechseln.

    
Sathesh S 26.01.2013 18:36
quelle

Tags und Links