2 Stimmen

SpringMVC benutzerdefinierten Sammlungseditor gibt keine Daten an JSP zurück

Ich binde eine Mehrfachauswahl-Liste in Spring, das Element erhält seine Daten nicht aus dem DAO, die Daten werden von einer anderen Auswahlliste hinzugefügt. Der Benutzer klickt auf eine Schaltfläche und die Daten werden mit jQuery an die Mehrfachauswahlliste gesendet.

Wenn das Formular abgeschickt wird, erfolgt keine Datenbindung für das Element, da es sich um einen komplexen Datentyp handelt. Deshalb habe ich einen CustomEditor registriert und ihn dem @initbinder hinzugefügt.

BEARBEITET Ich habe den Code aktualisiert, der CollectionEditor gibt nun eine Liste von Bürgern an die Ansicht zurück, jedoch kann ich die Daten in der Liste nicht abrufen, um die Auswahlliste zu füllen. Ich versuche, Elemente zur Liste hinzuzufügen, aber die JSP-Auswahllisten bleiben weiterhin null, wenn sie vom Server zurückkommen.

Hier ist der Code:

CustomCollectionEditor

@InitBinder("crime")    
    protected void initBinder(WebDataBinder binder, HttpServletRequest request, ServletRequestDataBinder victimbinder){
     victimbinder.registerCustomEditor(List.class, "victims", new CustomCollectionEditor(List.class){
         protected Object convertElement(Object element){

             Citizens victims = new Citizens();

             String ssNumber = "";

             if (element instanceof String){
                ssNumber = (String) element;

             }                      

             logger.debug("element is ;" +element);

             try {

                int socialSecurityNumber = Integer.parseInt(ssNumber);
                victims = citizenManager.getCitizen(socialSecurityNumber);

            } catch (NumberFormatException e) {                     
                logger.error(e.getMessage());
            } catch (Exception e) {
                logger.error(e.getMessage());
            }

             return victims;        
         }

    }); 

JSP, das im Controller aus dem DAO gefüllt wird

Hier sind Daten aus der DAO-Klasse enthalten. Wenn die Schaltfläche geklickt wird, werden die Daten aus der Liste entnommen und an die andere Liste angehängt, die mit dem POJO verknüpft ist.

Opferliste/button>

JSP-Auswahlelement, das mit POJO verknüpft ist

Opfer im Verbrechen-

2voto

devdar Punkte 5434

Die Lösung für dieses Problem war sehr einfach, da die gesamte Arbeit bereits im CustomCollectionEditor erledigt wurde. Dies ist wichtig beim Binden von komplexen Datentypen wie oben. Es gibt möglicherweise andere Ansätze, dies zu tun, aber ich finde diesen Ansatz sehr sauber und einfach.

Die Rückgabeanweisung ist sehr wichtig, da sie sich an das Elementattribut des Elements in der Ansicht bindet. CustomCollectionEditor gibt eine Liste von Objekten (Opfer) zurück. Die Verwendung des DAO ruft das Objekt aus der Datenbank ab. Dies ist wichtig, da der Beitrag nur den Auswahllabelwert sendet und nicht das Label, daher rekonstruieren wir die Liste und senden sie erneut an die Ansicht.

Das, was ich hier ausgelassen habe, war das Übergeben des Listenobjekts vom Controller zurück an die Ansicht.

Controller

@RequestMapping(value="save.htm", method = RequestMethod.POST)
    public ModelAndView handleSave(@Valid @ModelAttribute Crime crime, 
    BindingResult result,
    ModelMap m,
    Model model) throws Exception {

    if(result.hasErrors()){
           model.addAttribute("victimList",crime.getVictims());

    return new ModelAndView("*Ihre Ansicht*");
...............

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X