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
問題を修正していただきありがとうございます – dlinx90