2017-02-10 4 views
1

Я пытаюсь добавить combobox в свою форму. Но в выпадающем списке, вместо имен, что-то еще появляется (как [email protected]) problem screenshotSpring MVC Combobox Issue

Вот мои исходники ...

Мой контроллер:.

@RequestMapping("/tribunekle") 
public String addTribune(Model model){ 
    Tribune tribune = new Tribune(); 
    List<Stadium> stadiumList = stadiumService.getAllStadiums(); 
    model.addAttribute("tribune",tribune); 
    model.addAttribute("stadiumList",stadiumList); 

    return "tribunekle"; 
} 

@RequestMapping(value = "/tribunekle",method = RequestMethod.POST) 
public String addTribunePost(@ModelAttribute("tribune")Tribune tribune, BindingResult result){ 
    if(result.hasErrors()){ 
     return "tribunekle"; 
    } 
    tribuneService.addTribune(tribune); 
    return "redirect:/admin/tribunler"; 
} 

Добавить Трибуна JSP:

<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> 
 
<%@include file="template/adminheader.jsp"%> 
 

 
<div class="col-sm-9 col-sm-offset-3 col-md-10 col-md-offset-2 main"> 
 
    <div class="page-header"> 
 
     <h2>Add tribune> 
 
     <p>Yeni tribun ekleyin</p> 
 
    </div> 
 

 
    <form:form action="${pageContext.request.contextPath}/admin/tribunler/tribunekle" method="POST" commandName="tribune"> 
 
     <div class="form-group"> 
 
      <label for="name">Tribune Name</label><form:errors path="tribuneName" css="color:#ff0000"/> 
 
      <form:input path="tribuneName" id="name" class="form-Control"/> 
 
     </div> 
 

 
     <div class="form-group"> 
 
      <label for="stadium">Stadium</label> 
 
      <form:select path="stadium" items="${stadiumList}"/> 
 
     </div> 
 

 

 
     <input type="submit" value="Add" class="btn btn-default"/> 
 
     <a href="<c:url value="/admin/tribunler"/>" class="btn btn-default">Iptal</a> 
 
    </form:form> 
 
</div>
Tr ibune класс:

public class Tribune implements Serializable{ 

private static final long serialVersionUID = -8200937968701786490L; 

@Id 
@GeneratedValue(strategy = GenerationType.AUTO) 
private int tribuneId; 
@NotEmpty(message = "Tribune name must not be null") 
private String tribuneName; 
@ManyToOne 
@JoinColumn(name = "stadiumId") 
@JsonIgnore 
private Stadium stadium; 

источник DaoImpl коды

@Autowired 
private SessionFactory sessionFactory; 

@Autowired 
private StadiumService stadiumService; 

public void addTribune(Tribune tribune){ 
    Session session = sessionFactory.getCurrentSession(); 
    session.saveOrUpdate(tribune); 
    session.flush(); 
} 
+0

Вы пытались переопределить метод ToString в своем классе com.project.model.stadium? – RubioRic

+0

Или взгляните на этот вопрос об использовании формы: выберите http://stackoverflow.com/questions/22860381/what-is-formselect-path-in-spring-tag-used-for – RubioRic

+0

@RubioRic спасибо. Теперь имена сокетов появляются в поле со списком. Но когда я нажимаю кнопку отправки, я получаю эту ошибку: не удалось преобразовать значение свойства типа java.lang.String в требуемый тип com.biletdevret.model.Stadium для свойства стадиона; Вложенное исключение - java.lang.IllegalStateException: Невозможно преобразовать значение типа [java.lang.String] в требуемый тип [com.biletdevret.model.Stadium] для свойства стадиона: не найдено подходящих редакторов или стратегия конверсии –

ответ

1

Вам нужно установить itemLabel (что поле стадиона должны быть размещены в качестве метки) и ItemValue (что поле стадиона должны быть размещены в качестве значения) недвижимость формы: выберите тег.

Ссылка: http://docs.spring.io/spring/docs/current/spring-framework-reference/html/spring-form-tld.html#spring-form.tld.select

Вы также можете сделать что-то вроде следующего:

<form:select path="stadium"> 
<c:foreach items=${stadiumList} var="stadium"> 
    <option value="${stadium.id}">${stadium.name}</option> 
</c:foreach> 
</form:select> 
+0

спасибо shi. Теперь имена сокетов появляются в поле со списком. Но когда я нажимаю кнопку отправки, я получаю эту ошибку: не удалось преобразовать значение свойства типа java.lang.String в требуемый тип com.biletdevret.model.Stadium для свойства стадиона; nested exception is java.lang.IllegalStateException: Невозможно преобразовать значение типа [java.lang.String] в требуемый тип [com.biletdevret.model.Stadium] для свойства стадиона: не найдено подходящих редакторов или стратегии конверсии –

+0

В вашем классе Tribune вы должен держать ссылку на стадион не сам объект стадиона. В вашей форме комбинированное поле, поскольку вы выбираете стадион id, а не сам стадион. Позже в вашем слое dao вы должны найти стадион из db с выбранным идентификатором, а затем нанести объект стадиона на объект трибуны, чтобы сохранить его. – mhshimul

+0

Спасибо за ваш ответ shi. Я использую аннотацию JoınColumn в моем классе трибунов. Нужно ли мне все это делать? Я присоединяю свой класс трибуны и daoimpl к моему вопросу –