2012-05-10 7 views
0

WebDataBinderをPropertyEditorで初期化して、StringをDocumentオブジェクトに変換してデータベースに保存できるようにします。 (私のHibernateマッピングはそれを必要とします)。これは正常に動作します。タイプ変換はデータベースに保存するだけで、表示はしません

私の問題は、私はdocumentNumberは、文書の種類として保存されDocumentRevisionテーブルを表示するとき、それは次のようなものを表示する次のとおりです。[email protected]

  • 私がする必要がありますかドキュメントタイプ を文字列に変換する新しいPropertyEditorを作成しますか?
  • どうすればいいですか? (私は今までに他の方法で回避、文字列を参照してください持っているので、例をいただければ幸いです - >オブジェクト)

私は春3.0を使用し、休止しています3

コード:

Document.javaマッピング

@OneToMany(mappedBy="document_number", cascade = CascadeType.ALL) 
private Set<DocumentRevision> documentRevisions; 

public void setDocumentRevisions(Set<DocumentRevision> documentRevisions){ 
    this.documentRevisions = documentRevisions; 
} 

DocumentRevision.javaマッピング

(テキストを

class DocumentPropertyEditor extends PropertyEditorSupport { 

@Override 
public void setAsText(String text) throws IllegalArgumentException { 
    Document value = documentService.retrieveDocumentNumber(text); 
    setValue(value); 
} 

@Override 
public String getAsText() { 
    Document d = (Document) getValue(); 
    return d != null ? String.valueOf(d.getDocumentNumber()) : ""; 
} 
} 
@InitBinder 
public void initBinder(WebDataBinder binder) { 
    binder.registerCustomEditor(Document.class, new DocumentPropertyEditor()); 
} 

@RequestMapping(value="/list", method=RequestMethod.GET) 
public String getDocumentRevisionList(Model model) { 
List<DocumentRevision> documentRevisions = documentRevisionService.retrieveAllDocumentRevisions(); 
model.addAttribute("documentRevisions", documentRevisions); 
return "document-revision"; 

@RequestMapping(value="/add", method=RequestMethod.GET) 
public String getDocumentRevision(Model model) { 
DocumentRevision documentRevision = new DocumentRevision(); 
model.addAttribute("documentRevisionAttribute", documentRevision); 
model.addAttribute("documentNumberList", documentService.retrieveAllDocumentNumbers()); 

return "new-documnent-revision"; 
} 


@RequestMapping(value="/add", method=RequestMethod.POST) 
public String postDocumentRevision(@ModelAttribute("documentRevisionAttribute") @Valid DocumentRevision documentRevision, BindingResult result) { 

if(result.hasErrors()){ 
    return "new-document-revision"; 
} 

documentRevisionService.createDocumentRevision(documentRevision); 
return "redirect:/testapp/document-revision/list"; 
} 

retrieveDocumentNumber:

@ManyToOne(cascade = CascadeType.ALL) 
@JoinColumn(name="DOCUMENT_NUMBER") 
private Document document_number; 

public void setDocument_number(Document document_number){ 
    this.document_number = document_number; 
} 

public Document getDocument_number(){ 
    return document_number; 
} 

2つのテーブル間の関係は、いくつかのDocumentRevisionsが同じDocumentNumberを持つことができますが、単一DocumentRevisionだけコントローラーの1 DocumentNumber

パート持つことができるということです)メソッド:

ここで、DocumentRevision l istが表示されます:

<c:forEach items="${documentRevisions}" var="documentRevision"> 
    <tr> 
    <td><c:out value="${documentRevision.documentId}"/></td> 
    <td><c:out value="${documentRevision.documentNumber}" /></td> 
    <td><c:out value="${documentRevision.documentRState}" /></td> 
    <td><a href="${addUrl}">Add</a></td> 
    </tr> 
</c:forEach> 

ありがとうございました!

/D

答えて

1

ルックは、それがデフォルトのtoString()メソッドを呼び出して好きです。このメソッドをドキュメントクラスで再定義することができます。この場合、あなたが望むものを出力します。

+0

問題を修正していただきありがとうございます – dlinx90

関連する問題