SpringBoot/Thymeleaf ein Attribut zum Controller schicken

vvs

Mitglied
Guten Abend!

ich habe eine html Seite:
Code:
<form action="#" id="huhuForm" th:object="${oTaskViewModel}" th:action="@{${actionHuhu}}" method="post">
...
<div class="...">
  <input class="xxx" type="button" onclick="$('#huhuForm').submit()" th:value="#{huhu.label}"/>
</div>
und Controller:
Code:
@PostMapping(HUHU + "/{taskId}/huhu")
public ModelAndView taskHuhu(@PathVariable(value = "taskId") Long taskId,
        @ModelAttribute @Valid OTaskViewModel oTaskViewModel,
        BindingResult bindingResult, Principal principal ) {
...
...
return null;
}
ich habe vor, ein Flag mitzusenden, falls man auf button geklickt hat, um Backendseitig zu unterscheiden, komme aber nicht voran.

Danke im Voraus.
 
Vielen Dank für die Rückmeldung. Ich habe zwei buttons und beim Klicken lande ich in die falsche Methode im Controller. Ich habe dann vor, im Controller zwei Methoden zu verschmelzen, muss aber wissen, auf welchen geklickt wurde.
Ich möchte so was Ähnliches haben:


<form action="#" id="huhuForm" th😱bject="${oTaskViewModel}" th:action="@{${actionHuhu}}" th:text="${button2}" method="post">

@PostMapping(HUHU + "/{taskId}/huhu")
public ModelAndView taskHuhu(@PathVariable(value = "taskId") Long taskId,
@ModelAttribute @Valid OTaskViewModel oTaskViewModel,
BindingResult bindingResult, Principal principal, String button2 ) {
...
...
return null;
}
 
Zuletzt bearbeitet:
Vielen Dank für die Rückmeldung. Ich habe zwei buttons und beim klicken lande ich in die falsche Methode im Controller. Ich habe dann vor, im Controller zwei Methoden zu verschmelzen, muss aber wissen, auf welchen geklickt wurde.
Du hast also zwei Forms, die beide die selbe action und selbe method ("post") nutzen, aber unterschiedliche Methoden auslösen müssen?


BTW, Code bitte in Code-Tags 🙂
 
Ich habe zwei buttons, die unterschiedliche actions aufrufen, falls man aber auf der Seite einen Validierungsfehler verursacht, gib es eine Backendprüfung und die URL ändert sich: domain/huhu1 und beim klicken dann auf button2, muss die action2 genutzt werden, da aber in der url /huhu1 steht, wird die action1 genutzt und man landet in die methode1 im Controller, muss aber die methode2 aufgerufen werden.

Normalverfahren
Url: domain -> Button1 -> domain/huhu1 -> action1 -> methode1
Url: domain -> Button2 -> domain/huhu2 action2 -> methode2

User verursacht einen Validierungsfehler und die Seite wird neugeladen, Url sieht nun so aus: domain/huhu1
Und beim Klicken auf button2 lande ich im Controller in methode1, weil domain/huhu1 ist

Backenseitige Prüfung ist nicht zu vermeiden. Deswegen war meine Überlegung, wenn in die methode1 im Controller lande, gucke ich, ob doch button2 geklickt wurde und leite dann zu methode2 weiter.

BTW: sorry, wollte aber fett markieren

Danke im Voraus!
 
Anstatt irgendwelche merkwürdigen Verrenkungen zu machen, sorg doch einfach dafür, das die Action passend ist?

Ich habe zwei buttons, die unterschiedliche actions aufrufen, falls man aber auf der Seite einen Validierungsfehler verursacht, gib es eine Backendprüfung und die URL ändert sich: domain/huhu1 und beim klicken dann auf button2, muss die action2 genutzt werden, da aber in der url /huhu1 steht, wird die action1 genutzt und man landet in die methode1 im Controller, muss aber die methode2 aufgerufen werden.
Kannst du in einfachen Worten erklären, was du vor hast, ohne irgendwelche technischen Erklärungen?
es klingt danach, als ob die aktuelle Seiten-URL eine Rolle spielt - das sollte sie dabei nicht. Ob die grad nur / oder /foo/bar ist, sollte* für die Action der Form keine Rolle spielen (*außer explizit gewollt).

Ist es eine Form mit zwei Buttons, die unterschiedliche Actions zur Folge haben, oder sind es zwei forms, mit jeweils einem Button?
 
Wie schon angedeutet: wenn das nötig ist, ist da an anderer Stelle vermutlich etwas falsch. Das ist zwar Symptome bekämpfen, aber die Ursache ignorieren.
 
Es sind zwei Buttons die zwei unterschiedliche Forms ansprechen. In einem Form kann ein bestimmtes Feld nicht leer sein in dem anderen Form kann das Feld leer sein. Falls man das Feld leerlässt und auf den ersten Button klickt, findet eine Backenprüfung statt und man wird auf domain/huhu weitergeleitet das Feld wird rot markiert und erschein eine Fehlermeldung. Dann klickt man auf den anderen Button, hier kann man das Feld leerlassen und Methode im Controller wird aufgerufen. Jetzt muss ich im Controller eine Fallunterscheidung machen und erkennen können, was für ein Button geklickt wurde. Ich habe das mit hidden gemacht, finde die Lösung aber Kacke...
 
Wenn es zwei verschieden Forms sind, dann sollten die auch unterschiedliche Actions bekommen, die jeweils unterschiedliche Methoden im Controller ansprechen.

Gibt es irgendetwas, was dagegen spricht?
 
Nur als kleine Ergänzung: gemeinsame Funktionalitäten lassen sich da ja auch problemlos in gemeinsam benutzte Methoden ausgliedern.

Sollte selbstverständlich sein, aber ich wollte es noch kurz erwähnen.
 

Zurück
Oben