2017-02-10 11 views
1

私は自分のフォームにコンボボックスを追加しようとしています。しかし、コンボボックスで、名前ではなく、何か他のものが表示されます... problem screenshotSpring MVC Combobox Issue

ここ

私のソースコードがある([email protected]のような)

マイコントローラー:。

@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

は、あなたのクラスcom.project.model.stadiumでtoStringメソッドを上書きしようとしたことがありますか? – 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です:プロパティスタジアムの必須タイプ[com.biletdevret.model.Stadium]にタイプ[java.lang.String]の値を変換できません:一致するエディタまたは変換ストラテジが見つかりません –

答えて

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

ありがとうございます。コンボボックスにスタジアム名が表示されます。しかし、ボタンをクリックしてボタンをクリックすると、このエラーが表示されます; java.lang.String型のプロパティ値をプロパティスタジアムの必須型com.biletdevret.model.Stadiumに変換できませんでした。ネストされた例外はjava.lang.IllegalStateExceptionです:プロパティスタジアムの必須タイプ[com.biletdevret.model.Stadium]にタイプ[java.lang.String]の値を変換できません:一致するエディタまたは変換戦略が見つかりません –

+0

トリビューンクラスではスタジアムオブジェクト自体ではなく、スタジアムの参照を保持する必要があります。フォームのコンボボックスで、スタジアムそのものではなくスタジアムIDを選択します。後であなたのDAO層では、選択したidを持つdbからスタジアムを見つけ、それを保存するためにスタジアムオブジェクトをトリビューンオブジェクトにマップする必要があります。 – mhshimul

+0

ご回答いただきありがとうございます。私はトリビュートクラスでJoinColumnアノテーションを使用しています。私はまだこの操作を行う必要がありますか?私のトリビュートクラスとdaoimplを私の質問に添付してください –