Przekazanie obiektu z form do kontrolera Spring MVC

Odpowiedz Nowy wątek
2016-01-09 14:25

Rejestracja: 4 lata temu

Ostatnio: 1 rok temu

0

Witajcie,
na początku chciałęm się przywitać jako, iż jest to mój pierwszy post - więc WITAM :)
Od jakiegoś czasu jestem samoukiem Javy.
Mam pytanie ale za bardzo nie wiem jak to wytłumaczyć - spróbuje opisać.

Mam trzy kontrolery

    @RequestMapping(name = "index")
    public ModelAndView index(@ModelAttribute("atryb") Lek lek)
    {
        return new ModelAndView("index");
    }

    @RequestMapping(value = "/medicaments", method = RequestMethod.GET, headers="Accept=application/json")
     public List<Medicament> getMedicaments()
     {
        return medicamentService.findAll();
     }

    @RequestMapping(name = "add", method = RequestMethod.POST)
    public String add(@ModelAttribute("atryb") Lek lek)
    {
        System.out.println(lek.getName());
        int id = Integer.parseInt(lek.getName().substring(lek.getName().lastIndexOf("id:") + 3, lek.getName().length()));
        return "redirect:index";
    }

index.jsp


<script type='text/javascript'>
$(window).load(function(){

var productNames = new Array();
var productIds = new Object();
$.getJSON('/aplikacja/medicaments', 
        function(data) {
            $.each( data, function ( index, product )
                    {
                        productNames.push( product.name + " | " + product.producent + " | " + product.pack + " | " + product.kind + " | id:" + product.id);
                        //productNames.push( product.name );
                        productIds[product.name] = product.id;
                    } );
                    $( '#product' ).typeahead( { 
                        limit:3,
                        source:productNames

                        } );
        }
    );

});
</script>
<form:form method="POST" action="/aplikacja/add" modelAttribute="atryb">
    <table>
        <tr>
            <td>wybierz: </td>
            <td><form:input path="name" id="product" /></td>
        </tr>
        <tr>
            <td>...</td>
            <td><input type="submit" value="Submit"/></td>
        </tr>
    </table>
</form:form>

W drugim kontrolerze pobieram listę pewnych objektów i przekazuję je do json, którego używam w index.jsp aby w formie pokazała się lista pobrana z bazy. Wyświetlam w liście dane z bazy razem z id i potem jak String przkaże się do kontrolera add to parsuję Stringa w celu wyciągnięcia id.

Czy jest jakiś sposób (pewnie jest : ) aby w formie widoczne były tylko nazwy obiektów i submit przekazał cały obiekt a nie tylko Stringa z pola?

Mam nadzieję, że wyjaśniłem to jasno i z góry dziękuję za odpowiedź.
PS. Skrypt dodający dane do wybrania z forma znaleziony w necie i przerobiony na potrzeby.

Pozostało 580 znaków

Swr
2016-01-09 15:03
Swr

Rejestracja: 8 lat temu

Ostatnio: 1 godzina temu

Nie jestem pewien czy zrozumiałem, ale:

  1. Można przekazać z formularza dodatkowe dane które nie będą widoczne dla użytkownika (input typu hidden).
  2. Takie połączenie w jeden string a później jego parsowanie nie jest fajne.

Pozostało 580 znaków

2016-01-12 18:41

Rejestracja: 4 lata temu

Ostatnio: 1 rok temu

0

Problem leżał w javascripcie, który wrzucał dane z jsona do forma.
Zmieniałem go na

    <script>
        $(document).ready(
                function() {
                    var options = {
                        url : "/medicaments.json",
                        getValue : "name",

                        list : {
                            match : {
                                enabled : true
                            },
                            onSelectItemEvent : function() {
                                var selectedItemValue = $("#basics")
                                        .getSelectedItemData().id;
                                $("#inputTwo").val(selectedItemValue).trigger(
                                        "change");
                            }

                        },
                        template : {
                            type : "description",
                            fields : {
                                description : "description"
                            }
                        }

                    };

                    $("#basics").easyAutocomplete(options);
                });
    </script>

i działa bez zarzutów. Id wrzuca do hidden i obyło się bez parsowania Stringa :) Dzięki @Swrza naprowadznie na hidden input bo od tego zacząłem szukania rozwiązania.

Pozostało 580 znaków

Odpowiedz

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0