Przekazanie obiektu z form do kontrolera Spring MVC

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.

1

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.
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.

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