2017-12-05 4 views
0

Meine Enum:Enum-Werte je nach Controller Standort in thymeleaf

public enum ADD_OR_EDIT { 

    ADD("/user/add", "addForm"), EDIT("/user/edit", "editForm"); 

    private String thAction; 
    private String thObject; 

    ADD_OR_EDIT(String thAction, String thObject) { 
     this.thAction = thAction; 
     this.thObject = thObject; 
    } 
    //getters and setters ommited to clear view 
} 

Meine Controller Linie für bearbeiten

addAttribute("addOrEdit", ADD_OR_EDIT.EDIT); 

Meine Controller Linie für add:

addAttribute("addOrEdit", ADD_OR_EDIT.ADD); 

Die Frage ist, wie um meine Thymianblattform zu fixieren, um davon abhängig zu werden.

Zum Beispiel:

<form action="#" th:action="(@{addOrEdit.thAction})" class="form-horizontal form-narrow" th:object="${addOrEdit.thObject}" 
     method="post"> 

(Dieser funktioniert nicht)

UPDATE:

Das Problem mit dem zweiten Parameter von ENUM ist - thObject.

in add:

model.addAttribute("basicForm", basicForm); 
model.addAttribute("addOrEdit",ADD_OR_EDIT.ADD); 

in edit:

model.addAttribute("editForm", editForm); 
model.addAttribute("addOrEdit",ADD_OR_EDIT.EDIT); 

Vielleicht ist der Wert von th: Objekt ist "AddForm" statt AddForm und dies einen Fehler verursachen.

UPDATE2:

Dieses funktioniert:

<form action="#" th:action="(${addOrEdit.thAction})" class="form-horizontal form-narrow" th:object="(${basicForm})" 
     method="post"> 

Dieser funktioniert auch:

<form action="#" th:action="(${addOrEdit.thAction})" class="form-horizontal form-narrow" th:object="(${editForm})" 
     method="post"> 

So, jetzt der Fall ist, sie von ENUM zu verbinden, wie wir auf thAction tat: Dies funktioniert nicht:

<form action="#" th:action="(${addOrEdit.thAction})" class="form-horizontal form-narrow" th:object="(${{addOrEdit.thObject})" 
     method="post"> 
+0

was erwarten Sie mit diesem Formular zu tun? Warum brauchen Sie Formular und nicht einfachen Link zum Beispiel, möchten Sie einige Informationen an den Server senden? – varren

+0

Ich möchte ein Formular zum Bearbeiten und Hinzufügen anstelle von zwei getrennten Formen verwenden, und ich habe zwei getrennte Controller zum Hinzufügen und Bearbeiten – degath

+0

können Sie auch 'editForm' /' basicForm'-Klasse, da, wenn diese 2 verschiedene Klassen sind, ich glaube nicht, dass du in der Lage sein wirst, ein einzelnes Formular für sie zu verwenden – varren

Antwort

2

Verwendung th:action="${addOrEdit.thAction}" statt th:action="@{addOrEdit.thAction}"

Update:

model.addAttribute("form", basicForm); 
model.addAttribute("addOrEdit",ADD_OR_EDIT.ADD); 
in edit: 

model.addAttribute("form", editForm); 
model.addAttribute("addOrEdit",ADD_OR_EDIT.EDIT); 


<form action="#" th:action="(${addOrEdit.thAction})" class="form-horizontal form-narrow" th:object="${form}" 
     method="post"> 
+0

funktioniert nicht ... :( – degath

+0

poste deine Ausgabe des html.There muss etwas in Ihrem Projekt falsch sein, aber nicht hier, weil es in meiner Maschine funktioniert – neo

+0

Ich weiß, wo das Problem ist, geben Sie mir eine Sekunde Ich werde die Antwort aktualisieren, so dass Sie alles wissen und vielleicht helfen Sie mir irgendwie :) – degath

1

Es hängt wirklich davon ab, welche Art von Informationen, die Sie buchen möchten. Wenn es sich um ein Benutzer-Pojo handelt, müssen Sie jedes Feld in Ihr Formular aufnehmen. Der grundlegende Fall würde ungefähr so ​​aussehen:

<form action="#" th:action="@{${addOrEdit.thAction}}" 
     class="form-horizontal form-narrow" th:object="${__${addOrEdit.thObject}__}" 
     method="post"> 

    <!--FIELDS YOU WANT TO SUBMIT--> 
    <input name="id" type="text" th:value="*{id}" hidden="hidden"/> 
    <input name="name" type="text" th:value="*{name}" hidden="hidden"/> 
    <input name="gender" type="text" th:value="*{gender}" hidden="hidden"/> 
    <button type="submit">Submit</button> 
</form> 
+0

Ich aktualisierte Frage, damit Sie überprüfen können, was das wirkliche Problem ist, denke ich. Th Aktion funktioniert gut und das Problem ist mit th: Objekt – degath

+0

@degath werfen Sie einen Blick, ich aktualisierte meine Antwort – varren

+0

geben Sie mir eine Sekunde, um es zu testen :) – degath

Verwandte Themen