gpt4 book ai didi

java - 类型转换仅适用于保存到数据库,不适用于显示

转载 作者:行者123 更新时间:2023-12-01 15:23:22 24 4
gpt4 key购买 nike

我正在使用 PropertyEditor 初始化 WebDataBinder,以处理字符串到文档对象的转换,以便可以将其保存到数据库中。 (我的 Hibernate 映射需要它)。这很好用。

我的问题是,当我显示 DocumentRevision 表(其中 documentNumber 保存为文档类型)时,它显示如下内容:testapp.domain.document@1f93466

  • 我是否必须创建一个新的 PropertyEditor 来转换文档类型变成一个字符串?
  • 我该怎么做? (如果有一个例子,我将不胜感激,因为我只见过相反的方式,字符串 --> 对象)

我正在使用 Spring 3.0 和 Hibernate 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 映射

@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;
}

两个表之间的关系是多个DocumentRevision可以有相同的DocumentNumber,但单个DocumentRevision只能有一个DocumentNumber

Controller 的一部分:

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(text) 方法:

public Document retrieveDocumentNumber(String text){
return (Document) this.sessionFactory.getCurrentSession().get(Document.class, text);
}

显示 DocumentRevision 列表的 jsp 页面部分:

 <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

最佳答案

看起来它调用了默认的 toString() 方法。您可以在文档类中重新定义此方法。在这种情况下,它将输出您想要的内容。

关于java - 类型转换仅适用于保存到数据库,不适用于显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10532961/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com